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