为了使我的脚本更安全,我已经开始使用预准备语句来阻止mysql注入。这个脚本很好地插入了数据,但是当它应该返回正确的id号时,获取最后插入的id(基于数据库中的自动增量)现在返回0。
这部分插入就好了。
$stmt = $conn->prepare("INSERT INTO users (userName) VALUES (?)");
$stmt->bind_param("s", $_SESSION['username']);
$stmt->execute();
这是我遇到问题的地方。我正在尝试获取用户的最后一个插入ID,它返回0。
// Get the last inserted ID for the users ID
$query = "SELECT LAST_INSERT_ID()";
$result = mysql_query($query);
if ($result) {
$nrows = mysql_num_rows($result);
$row = mysql_fetch_row($result);
$userId = $row[0];
}
当我在准备好的陈述开始之前获得我的脚本时,这是有效的。我唯一改变的是添加Prepared语句来插入数据,我的数据库连接如下:
$conn = new mysqli($server, $user, $password, $database) or die('Could not connect: ' . mysql_error());
我是一个使用php的菜鸟,所以任何帮助都会非常感激。
答案 0 :(得分:4)
您可能有一个根本的误解:当您切换到mysqli
时,您的mysql_*
功能将不再使用相同的连接。
LAST_INSERT_ID()
适用于每个连接。
您必须使用与主查询相同的库/连接进行查询,或者@zerkms指出,使用$conn->insert_id
。
答案 1 :(得分:1)