2010-12-15 75 views
1

为了让脚本更安全,我开始使用预准备语句来防止mysql注入。这个脚本插入数据就好了,但是当它返回正确的id号时,获取最后插入的id(基于数据库中的自动增量)现在返回0。准备好的语句以及它们如何影响查询

这部分插入就好了。

$stmt = $conn->prepare("INSERT INTO users (userName) VALUES (?)"); 
$stmt->bind_param("s", $_SESSION['username']); 
$stmt->execute(); 

这是我遇到问题的地方。我试图获取用户的最后插入的ID和它返回0。

​​

这是工作的时候我就开始准备的语句之前有我的剧本。我唯一改变的是将准备好的语句来插入数据和我的数据库连接如下:

$conn = new mysqli($server, $user, $password, $database) or die('Could not connect: ' . mysql_error()); 

我是用PHP一个小白所以任何帮助将不胜感激。

回答

4

您可能有一个基本的误解:当您切换到mysqli时,您的mysql_*函数将不再使用相同的连接。

LAST_INSERT_ID()以每个连接为基础工作。

您必须使用与主要查询相同的库/连接进行该查询,或者@zerkms指出,使用$conn->insert_id

+1

此答案将与此行完成'$ conn-> insert_id' – zerkms 2010-12-15 01:11:29

+0

@zerkms好!补充,谢谢。 – 2010-12-15 01:12:56

+0

当您有API函数执行相同操作时,使用查询获取最后一个插入标识没有意义。 – vanneto 2010-12-15 01:15:49

1
+0

谢谢。我已经四处搜寻,但一直没有成功。你知道mysqli_insert_id()是否返回整个数据库中最后一个插入的行,还是每个会话都返回?如果多个用户正在插入,我想检索插入的用户的最后一个插入的ID。 – Jason 2010-12-15 01:19:26

+0

@Jason,它是'mysqli'对象的最后一个查询。 – 2010-12-15 01:32:48

相关问题