2011-07-17 180 views
5

執行SQL語句時,如 INSERT INTO table ... ON DUPLICATE KEY UPDATE ... 我依靠mysql_affected_rows()來確定是否執行插入或更新。 作爲http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html MySQL網站,它指出:mysql_affected_rows()返回-1

對於INSERT ... ON DUPLICATE KEY UPDATE語句時,受影響的行值是1,如果行插入一個新行2,如果現有的行已更新。

全部被工作正常,直到我們升級到MySQL 5.1.16,當許多查詢現在有mysql_affected_rows()函數返回負一(-1)

http://dev.mysql.com/doc/refman/5.1/en/mysql-store-result.html在MySQL網站建議的解決方法是調用函數mysql_query()在選擇查詢上執行之後的函數mysql_store_result()。

但是,PHP似乎沒有定義這樣的函數。

如何讓mysql_affected_rows()使用PHP和MySQL 5.1.16正常工作?

+0

您是否正在使用預準備語句?順便說一下,PHP有store_result函數 - http://php.net/manual/en/mysqli.store-result.php,但是store_result在SELECTs之後調用,而不是在INSERT之後調用。 * -1表示查詢返回錯誤,或者對於SELECT查詢,在調用mysql_store_result()之前調用mysql_affected_rows()* –

+0

我也有這個問題... –

回答

2

mysql_affected_rows如果最後一個查詢失敗,則返回-1。我會檢查你的查詢和/或數據庫連接。見this link

4

通常,如果mysql_affected_rows()返回-1,則表示查詢失敗(有關更多信息,請參閱manual page)。您可以通過調用mysql_error()來檢查錯誤是什麼,但在您調用mysql_query()之前,您應該已經找到錯誤,然後才能找出有多少行受到影響。

既然你問的是store_result功能,還讓我回答你的問題的一部分:

PHP的MySQL模塊可能沒有store_result功能,但較新的MySQLi模塊一樣。見http://php.net/manual/en/mysqli.store-result.php

一般建議從使用mysql_xxx功能等效mysqli_xxx功能反正切換,所以這將是一個完美的機會,讓你這樣做。

您不需要升級您的PHP版本,因爲MySQLi模塊是在PHP 5.0中引入的。不過,我會建議考慮升級 - 如果您使用的是PHP 5.1,那麼您使用的版本已經超過五年了。