PHP - mysql_insert_id()和竞争条件?

时间:2013-09-15 10:14:19

标签: php mysql race-condition mysql-insert-id

我认为我在一些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返回零以外的东西?这看起来有点愚蠢。 :/

1 个答案:

答案 0 :(得分: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