mysql_insert_id无效

use*_*709 1 php mysql

对于模糊标题的道歉,这是我的问题:

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

这是我的表格定义:

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;
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取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();
?>
Run Code Online (Sandbox Code Playgroud)

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

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

我也试过显式传递数据库链接.但是这会产生以下错误:

mysql_insert_id(): supplied argument is not a valid MySQL-Link resource...
Run Code Online (Sandbox Code Playgroud)

最后一点,插入查询有效.它肯定会插入一个包含预期数据的新行!

任何见解将不胜感激!谢谢

Lep*_*eus 5

你正在使用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)." [...]
Run Code Online (Sandbox Code Playgroud)

有关此内容的更多信息,请查看有关此主题的众多问题,例如以下问题:如何通过PHP和mysql正确转义字符串