[英]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.