1

我想我在一些 PHP 代码中有一个竞争条件,mysql_insert_id() 返回 0 - 但我不知道为什么。

$insertsess=mysql_query("insert into cior_sessions values ('','$cid','$uid','$tutook',STR_TO_DATE('$sessiondate','%d/%m/%Y'),'$sessionnum')");
$sessionid=mysql_insert_id($insertsess);
echo "<input type=\"hidden\" name=\"sid\" id=\"sid\" value=\"" . $sessionid . "\">";

我自己无法复制该问题,但可以看到其他用户有(由于他们随后所做的结果是 SID 为 0,但不一致)。

我对此的理解是 mysql_insert_id 将等待来自 $insertsess 的查询完成 - 这是错误的吗?如果是这样,我是否需要有诸如看门狗循环之类的东西来等待 mysql_insert_id 返回非零的值?这似乎有点愚蠢。:/

4

1 回答 1

3

当您调用时,mysql_insert_id()您应该使用连接资源,而不是您在发布的代码段中所做的结果集资源。

$link = mysql_connect('dbhost', 'dbuser', 'dbpass', 'dbname');
$result = mysql_query("Some query here');
$lastId = mysql_insert_id($link); // you have used your result set here
于 2013-09-15T10:21:56.367 回答