यदि 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;
}