2016-02-17 66 views
1

我正在维护一个运行时间大约为1年的服务器。以前没有人会错。但是,突然间,mysql_insert_id()中有一个错误,它返回0,而不是数据库中的普通行ID。这是代码的核心。mysql_insert_id()很少返回0

$sql = "INSERT INTO $db_table (name,email) VALUES('$name','$email')"; 

mysql_query($sql); 

$current = mysql_insert_id(); 

还要注意,即使是在代码中没有变化,程序顺利再次运行错误发生之后。我觉得很奇怪。

这是我的可能解释。因为我在一个公共服务器上托管,其中很多使用相同的MYSQL服务器。那么当mysql_query($sql)时,服务器会交换进程并让另一个人运行另一个SQL命令(可能是例如SELECT语句),并且在它们执行后,它会交换回我自己的代码并继续执行,结果为0?

请帮忙。谢谢。

+0

黄油方式,使用参数和基于交易的查询使用PDO摆脱做这种情况。 –

+2

这是php的问题,请标记为php –

+0

我的老板告诉我不要改变尽可能多的东西,只是解决这里的问题。由于有成千上万的页面具有这种设置。只有一页暂时死亡像这样。 – CHANist

回答

1

确保在mysql_query和mysql_insert_id中使用resource_identifier作为参数。 如果你不这样做,就像你想的那样,使用最后一次连接到mysql服务器。

$resource = mysql_connect(...); 
$sql = "INSERT INTO $db_table (name,email) VALUES('$name','$email')"; 

mysql_query($sql, $resource); 

$current = mysql_insert_id($resource); 

请考虑使用mysqli的奥德PDO因为mysql_ *功能已被弃用,并打算在未来的PHP版本被删除

+0

我知道...... MySQL已经在PHP 7.0中被删除了。如果我不记得有错。但是,由于我正在帮助老板维护系统,并且我被命令找出这种情况的问题,但不能更改代码。 :( – CHANist

+0

问题是ressource_identifier 如果没有ressource_identifier,你就无法解决问题,因为这是一个代码错误,而不是服务器故障。 –

+0

你的意思是说错误来自于我的想法吗?因此,我应该在'int mysql_insert_id([resource $ link_identifier = NULL])中提供$ link_identifier'。然后问题就解决了吗? – CHANist