Frage

Ich habe diesen Code:

$rows = array();
$res = mysql_query($someQuery);

if(!mysql_errno())
    while($row = mysql_fetch_assoc($res))
        $rows[] = $row;

$someQuery ist eine willkürliche Abfrage, in die ich in ein Formular schreibe. Der MySQL_errno fängt den Fall auf, wenn ich eine MySQL -Abfrage mit Fehlern schreibe. Aber ich habe gerade festgestellt, dass wenn ich eine Abfrage "aus table_name" mache, es natürlich kein Fehler ist, aber gleichzeitig fehlschlägt die MySQL_Fetch_assoc mit einer "Warnung: mysql_num_rows (): Das angegebene Argument ist kein gültiges MySQL -Ergebnis ist Ressource in /blah/blah/file.php in Zeile x ".

Ich habe versucht, im Handbuch danach zu suchen (vielleicht bin ich nur blind ...), aber ich kann eine Funktion verwenden, um zu überprüfen, ob $ res eine gültige MySQL -Ergebnisressource ist oder nicht?

War es hilfreich?

Lösung

if ($res) Sollte gut funktionieren, um zu überprüfen, ob es sich um eine Ressource handelt. is_resource () bestimmt, ob es sich überhaupt um eine gültige Ressource handelt.

Sie können auch überprüfen mysql_afted_rows Um zu versuchen, festzustellen, ob es sich um ein Einfügen/Update/etc handelt

Andere Tipps

Zusammen mit is_resource() Sie können verwenden get_resource_type() Um zu überprüfen, ob es sich um eine MySQL -Ressource handelt.

$res_type = is_resource($res) ? get_resource_type($res) : gettype($res);

if(strpos($res_type, 'mysql') === false) {
    echo 'Invalid resource type: ' . $res_type;
}

get_resource_type() kann zurückkehren "mysql link" oder "mysql link persistent" Abhängig von Ihrem Verbindungstyp.

mysql_query() kehrt zurück true oder false So können Sie es so überprüfen:

if($res) {
    // The query succeeded.
}

Vielleicht ändern Sie einfach die Bedingung in:

if(!mysql_errno() && @mysql_num_rows($res) > 0)

Die Bedingung fällt fehl, wenn es keine Zeilen gibt, und @ unterdrückt die Warnung.

Wenn Sie einfügen, aktualisieren, löschen oder fallen lassen mysql_query dann wird es nur zurückkehren true oder false (abhängig vom Erfolg des Betriebs).

Ich bin mir nicht sicher, was Sie in diesem Fall erwarten, was die Ressource enthalten wird?

Wenn Sie die Anzahl der betroffenen Zeilen benötigen, können Sie verwenden mysql_affected_rows().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top