如果webbiedave是不是在正確的軌道上,只有一個代碼路徑,允許這種情況在PHP源:
#if MYSQL_VERSION_ID < 32224
#define PHP_MYSQL_VALID_RESULT(mysql) \
(mysql_num_fields(mysql)>0)
#else
#define PHP_MYSQL_VALID_RESULT(mysql) \
(mysql_field_count(mysql)>0)
#endif
...
if (!mysql_result) {
if (PHP_MYSQL_VALID_RESULT(mysql->conn)) { /* query should have returned rows */
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save result set");
RETURN_FALSE;
} else {
RETURN_TRUE; // <<< this case
}
}
我會認爲這是一個錯誤。特別是因爲沒有真正的方法來驗證這一點 - PHP代碼中的mysql_num_fields使用的是你沒有得到的資源,而不是連接。
雖然它仍然是離奇,請求mysql_query C版失去了連接上返回零 - 如果你能夠,請嘗試以下補丁程序,並重新安裝mysql擴展:
Index: ext/mysql/php_mysql.c
===================================================================
--- ext/mysql/php_mysql.c (revision 311719)
+++ ext/mysql/php_mysql.c (working copy)
@@ -1485,6 +1485,9 @@
if (PHP_MYSQL_VALID_RESULT(mysql->conn)) { /* query should have returned rows */
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to save result set");
RETURN_FALSE;
+ } else if(mysql_errno(mysql->conn) != 0) {
+ php_error_docref("http://www.mysql.com/doc" TSRMLS_CC, E_WARNING, "%s", mysql_error(mysql->conn));
+ RETURN_FALSE;
} else {
RETURN_TRUE;
}
來源
2011-06-01 22:30:15
Mel
你確定它的查詢您使用返回true工作?因爲真正的只應該是插入更新或刪除。我會檢查並確保你沒有看到前面陳述中的變量。 – 2011-06-01 21:54:56
你是如何得出結論的,它返回TRUE?在你認爲發生這種情況的地方展示一個片段。 – Mel 2011-06-01 21:54:58
添加了片段。 'var_dump()'清楚地顯示了一個普通的'SELECT'查詢,我在一個正常的MySQL客戶端中運行並獲得了正常的結果。 – rid 2011-06-01 21:58:41