2011-02-09 230 views
3

我準備將PHP 5.2.12的實時Web服務器更新爲5.3.5。在準備中,我已經在第二臺服務器上進行了更新,這是現場服務器(「開發」服務器)的鏡像。兩臺服務器都使用FreeBSD,並使用兩個端口來安裝PHP和MySQL。實時服務器使用MySQL 5.0.89,新升級的開發服務器使用5.1.54。mysql_insert_id()在PHP更新後停止工作

以下代碼按照預期在活動服務器上執行(PHP 5.2.12/5.0.89),返回剛剛插入的AUTO_INCREMENT行的值。這個函數是整個站點使用的數據庫類的一部分,其中「$ this - > _ private ['cn']」是資源鏈接。

public function insert ($sql=false) { 
    @mysql_select_db($this->_private['db_name'], $this->_private['cn']); 
    $res = null;    
    if (false !== $sql) { 
     $query_obj = mysql_query($sql, $this->_private['cn']); 
     if ($query_obj) 
      $res = mysql_insert_id($this->_private['cn']); 
    } 
    return $res; 
} 

在開發服務器(5.3.5/5.1.54)上,返回值爲零。注 - 不爲空(如果查詢失敗,則返回),但爲零。我可以查看錶格並驗證是否已插入新行,並且自動增加字段已正確提前。字段值目前爲121288,所以它完全在PHP的整數範圍內。我甚至在一個簡單的頁面上重新創建了類的代碼,並得到了相同的結果。 mysql_error()表示沒有失敗。錯誤報告設置爲E_ALL,而不是在那裏窺視。

ARGH!有任何想法嗎?

+2

查詢您應該提交錯誤報告。聽起來你已經完成了盡職調查,而且看起來並不是你的錯。它可能已經在追蹤器中,甚至可能有解決方法。 – 2011-02-09 23:09:05

回答

1

看到這個bug其中建議在與SELECT LAST_INSERT_ID()

+0

這似乎是相關的,謝謝。然而,我注意到其中的一條評論指出「這個明顯的錯誤會在很久以前被發現」......我不得不同意。然而......我在這裏。 :)如果沒有別的,那現在給了我一個解決方法。不需要在我的課程中添加另一個查詢,但是我從未清楚mysql_insert_id()如何獲取它的信息;也許額外的查詢在資源消耗上相當於等價。 – 2011-02-09 23:18:11