Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysql_query () एक चयन कथन के साथ सत्य क्यों लौटाता है?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैसकल स्लो क्वेरी:इनर जॉइन + ऑर्डर बाय फाइलसॉर्ट का कारण बनता है

  2. त्रुटि 1130 (HY000):होस्ट '' को इस MySQL सर्वर से कनेक्ट करने की अनुमति नहीं है

  3. UTF-8 MySQL और चारसेट

  4. SQLite रैंडम सीडिंग ()

  5. MySqlCommand के साथ संग्रहीत कार्यविधि निष्पादित करते समय SqlNullValueException