2016-02-17 103 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