sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor returnerer mysql_query() TRUE med en SELECT-sætning?

Hvis webbiedave ikke er på rette vej, er der kun én kodesti, der tillader denne situation i php-kilden:

#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
    }
}

Jeg vil betragte dette som en fejl. Især da der ikke er nogen reel måde at bekræfte dette på - mysql_num_fields i PHP-koden bruger den ressource, du ikke får, ikke forbindelsen.

Selvom det stadig er mærkeligt, at C-versionen af ​​mysql_query returnerer nul ved mistet forbindelse - hvis du er i stand til det, så prøv følgende patch og geninstaller mysql-udvidelsen:

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. Sådan importeres Excel-fil til mysql-databasen fra PHP

  2. Hvordan viser man Oracle-skemastørrelse med SQL-forespørgsel?

  3. Sådan opretter du et sikkert login-script i PHP og MySQL

  4. Sqoop Import --password-fil funktion fungerer ikke korrekt i sqoop 1.4.4