wake-up-neo.net

Wie kann man prüfen, ob MySQL-Ergebnisse in PHP zurückgegeben werden?

Ich suche nach der besten Methode, um zu überprüfen, ob Ergebnisse in einer Abfrage zurückgegeben wurden. Ich habe das Gefühl, dass ich diesen Teil des Codes viel schreibe, und manchmal bekomme ich Fehler und manchmal auch nicht.

Zum Beispiel führe ich diese Abfrage aus, um zu prüfen, ob ein Benutzername vorhanden ist, bevor ein neuer in die Datenbank eingefügt wird.

$result = mysql_query("SELECT * FROM ...");

Dann möchte ich überprüfen, ob Ergebnisse zurückgegeben wurden. So mache ich es:

if (!$result) { PERFORM ACTION }

Wenn der erste Weg nicht funktioniert, wird dies manchmal

if (mysql_num_rows($result)==0) { PERFORM ACTION }

Dann sah ich sogar, dass ich es neulich so machen könnte:

list($total) = mysql_fetch_row($result);
if ($total==0) { PERFORM ACTION }

Was ist der beste Weg, dies zu tun?

60
timroman
if (mysql_num_rows($result)==0) { PERFORM ACTION }

Das bekommt meine Stimme.

OP geht davon aus, dass die Abfrage keinen Fehler zurückgibt, daher sollte dies ein Weg sein

121
benhowdle89

Eine Möglichkeit, dies zu tun, ist zu prüfen, was mysql_num_rows zurückgibt. Ein minimales vollständiges Beispiel wäre folgendes: 

if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) {
    // there are results in $result
} else {
    // no results
}

Es wird jedoch empfohlen, den Rückgabewert von mysql_query zu überprüfen und ordnungsgemäß zu behandeln, falls es false ist (was durch einen Fehler verursacht werden würde); wahrscheinlich, indem Sie auch mysql_error aufrufen und den Fehler irgendwo protokollieren.

12
Shoe

Wann immer wir Abfragen durchführen, um Daten zu erhalten, werden diese als Objekt zurückgegeben. Dann konvertieren die meisten von uns es in ein Array, um die Zeilen leicht durchlaufen zu können. In php wird mit der Funktion "empty ()" geprüft, ob ein Array leer ist, d. H. Ob es keine Daten enthält. So können wir überprüfen, ob die zurückgegebene Array-Darstellung der Abfrage nicht leer ist

if(!empty($result)){
           //DO STUFF
}
4

Was ist logischer, als den TYPE der Ergebnisvariablen vor der Verarbeitung zu testen? Er ist entweder vom Typ 'boolean' oder von 'resource'. Wenn Sie mit mysqli_num_rows einen booleschen Parameter verwenden, wird eine Warnung generiert, da die Funktion eine Ressource erwartet. 

$result = mysqli_query($dbs, $sql);

if(gettype($result)=='boolean'){ // test for boolean
    if($result){  // returned TRUE, e.g. in case of a DELETE sql  
        echo "SQL succeeded"; 
    } else { // returned FALSE
        echo "Error: " . mysqli_error($dbs);
    } 
} else { // must be a resource
    if(mysqli_num_rows($result)){

       // process the data    

    }
    mysqli_free_result($result);  
 }
3
G. Moore

Von allen oben genannten Möglichkeiten würde ich Gebrauch machen

if (mysql_num_rows($result)==0) { PERFORM ACTION }

vergleich mit dem Ergebnis wie unten

if (!$result) { PERFORM ACTION }

Dies ist der Fall, wenn ein mysql_error im Fehlerfall so effektiv auftritt, dass Sie einen doppelten Benutzernamen eingeben können ...

2
martynthewolf

Verwenden Sie die eine mit mysql_fetch_row, da "mysql_query () bei SELECT, SHOW, DESCRIBE, EXPLAIN und anderen Anweisungen, die resultset zurückgeben, bei Erfolg eine Ressource oder bei Fehlern FALSE zurückgibt.

Bei anderen SQL-Anweisungen (INSERT, UPDATE, DELETE, DROP usw.) gibt mysql_query () bei Erfolg den Wert TRUE zurück, oder bei einem Fehler FALSE. "

1
cristian

mysqli_fetch_array() gibt NULL zurück, wenn keine Zeile vorhanden ist.

In prozeduralem Stil: 

if ( ! $row = mysqli_fetch_array( $result ) ) {
    ... no result ...
}
else {
    ... get the first result in $row ...
}

Im objektorientierten Stil:

if ( ! $row = $result->fetch_array() ) {
    ...
}
else {
    ... get the first result in $row ...
}
0
xavier bs

Normalerweise benutze ich === ( Triple Equals ) und __LINE__, __CLASS__, um den Fehler in meinem Code zu lokalisieren:

$query=mysql_query('SELECT champ FROM table')
or die("SQL Error line  ".__LINE__ ." class ".__CLASS__." : ".mysql_error());

mysql_close();

if(mysql_num_rows($query)===0)
{
    PERFORM ACTION;
}
else
{
    while($r=mysql_fetch_row($query))
    {
          PERFORM ACTION;
    }
}
0
Amirouche Douda
$result = $mysqli->query($query);
if($result){
    perform action
}

so mache ich es, man könnte auch einen anderen Wurf dort werfen ...

0
$connect = new mysqli('localhost', 'user', 'password', 'db');
$result = $connect->query("select * from ...");
$count=$result->num_rows;
if(empty($count)){
echo"Query returned nothing";
}
else{
echo"query returned results";
} 
0
Toki

Wenn Sie die Aktion trotzdem ausführen möchten, wenn der $result ungültig ist: 

if(!mysql_num_rows($result))
    // Do stuff

Dies berücksichtigt einen 0 und die false, die bei einem Ausfall von mysql_num_rows() zurückgegeben werden.

0
D. Mariano