繁体   English   中英

mysql_insert_id不起作用

[英]mysql_insert_id not working

为模糊的标题表示歉意,这是我的问题:

我的代码的目的是在具有自动增量字段的表中插入新行。 插入之后,我想获取刚刚生成的自动增量字段的值。

这是我的表定义:

CREATE TABLE `EventComments` (
  `CommentID` int(11) NOT NULL AUTO_INCREMENT,
  `EventID` int(11) NOT NULL,
  `OwnerID` int(11) NOT NULL,
  `Comment` varchar(512) NOT NULL,
  `DateTime` datetime NOT NULL,
  PRIMARY KEY (`CommentID`)
) ENGINE=MyISAM AUTO_INCREMENT=68 DEFAULT CHARSET=latin1;

我正在尝试获取CommentID字段的值。

因此,这是发出插入查询,然后尝试获取CommentID值的php代码。

<?php
session_start();
ob_start();
include_once 'lib/functions.php';

if(isset($_SESSION['uid'])) {
    $eventID = $_GET['evid'];
    $ownerID = $_SESSION['uid'];
    $comment = $_GET['comment'];
    $comment = trim($comment);
    $dateTime = date('Y-m-d H:i:s');

    $db_connection = database_connect();

    if($eventID != null && !empty($comment)) {
        $query = "INSERT INTO meetup.EventComments (EventID, OwnerID, Comment,     DateTime) 
        VALUES (" . $eventID . ", " . $ownerID .", '" . $comment . "', '". $dateTime ."')";

        mysqli_query($db_connection, $query) or die(mysqli_error($db_connection));  

        $id = mysql_insert_id();
        $commentHtml = generateCommentFromData($db_connection, $ownerID, $comment, $dateTime,  $id);
        echo $commentHtml;
    }
}

ob_end_flush();
?>

此代码在php日志中发出以下错误:

mysql_insert_id() [<a href='function.mysql-insert-id'>function.mysql-insert-id</a>]: A link to the server could not be established...

我还尝试显式传递数据库链接。 但这会产生以下错误:

mysql_insert_id(): supplied argument is not a valid MySQL-Link resource...

最后一点,插入查询有效。 肯定是在插入带有预期数据的新行!

这里的任何见解将不胜感激! 谢谢

您正在使用mysqli扩展名来连接并运行查询,但是随后您使用mysql (请注意末尾缺少i)扩展名来获取插入的ID,这是行不通的。 虽然它们都是可以访问mysql的扩展,但它们还是两个截然不同的库,彼此之间无法共享连接。

作为记录,mysqli是您应该使用的版本,mysql是“旧”版本,不支持mysql> = 4.1的新功能。

换句话说,解决方案是使用mysqli_insert_id()

另外, 正确地转义参数,这样就不能将$ _GET和$ _POST变量的内容放在不安全的查询中。 至少使用mysqli_real_escape_string()

 $query = "INSERT INTO meetup.EventComments (EventID, OwnerID, Comment,     DateTime) 
        VALUES (" . mysqli_real_escape_string($eventID)." [...]

有关此的更多信息,请查看与此主题相关的众多问题,例如这一问题: 如何通过PHP和mysql正确地转义字符串

您可能要使用等效的mysqli扩展名: mysqli_insert_id()

通过传递连接资源,它可能会按原样工作,但是即使这样做,也不能混合来自两个单独的连接类的方法:

    $id = mysql_insert_id($db_connection);

DATETIME是MySQL中的一种Data Type ,这就是INSERT查询无法正常工作的原因。 请改用反引号`

$query = "INSERT INTO meetup.EventComments (`EventID`, `OwnerID`, `Comment`, `DateTime`) 
VALUES (" . $eventID . ", " . $ownerID .", '" . $comment . "', '". $dateTime ."')"; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM