web-dev-qa-db-fra.com

Le meilleur moyen de vérifier si les résultats de MySQL sont retournés en PHP?

Je cherche le meilleur moyen de vérifier et de voir si des résultats ont été renvoyés dans une requête. J'ai l'impression d'écrire souvent cette partie du code et parfois des erreurs, parfois des erreurs.

Par exemple, j'exécute cette requête pour vérifier l'existence d'un nom d'utilisateur avant d'en insérer un nouveau dans la base de données.

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

Ensuite, je veux vérifier et voir si des résultats ont été renvoyés. Voici une façon dont je le fais:

if (!$result) { PERFORM ACTION }

Si le premier moyen ne fonctionne pas, cela peut parfois:

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

Puis j'ai même vu que je pouvais le faire de cette façon l'autre jour:

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

Quelle est la meilleure façon de procéder?

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

Cela obtient mon vote.

OP en supposant que la requête ne renvoie aucune erreur, ce qui devrait être l'un des moyens

121
benhowdle89

Une façon de le faire est de vérifier ce que mysql_num_rows renvoie. Un exemple complet minimal serait le suivant: 

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

Mais il est recommandé de vérifier la valeur de retour de mysql_query et de la gérer correctement dans le cas où il s'agit de false (qui serait causé par une erreur); probablement en appelant également mysql_error et en enregistrant l'erreur quelque part.

12
Shoe

Chaque fois que nous faisons des requêtes pour obtenir des données, elles sont renvoyées sous forme d'objet. Ensuite, la plupart d’entre nous le convertissons en tableau pour parcourir facilement les lignes. En php, la fonction "empty ()" permet de vérifier si un tableau est vide, c’est-à-dire s’il ne contient aucune donnée. Nous pouvons donc vérifier si la représentation renvoyée du tableau de la requête n'est pas vide en procédant comme ceci

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

Qu'est-ce qui est plus logique que de tester le TYPE de la variable de résultat avant traitement? Lorsque vous utilisez un paramètre booléen avec mysqli_num_rows, un avertissement est généré car la fonction attend une ressource. 

$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

De toutes les options ci-dessus, je voudrais utiliser

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

vérifier contre le résultat comme ci-dessous

if (!$result) { PERFORM ACTION }

Ce sera vrai si un mysql_error se produit de manière aussi efficace en cas d'erreur, vous pouvez alors entrer un nom d'utilisateur en double ...

2
martynthewolf

Utilisez celle avec mysql_fetch_row car "Pour les instructions SELECT, SHOW, DESCRIBE, EXPLAIN et autres retournant des résultats, mysql_query () renvoie une ressource en cas de succès ou FALSE en cas d'erreur.

Pour les autres types d'instructions SQL, INSERT, UPDATE, DELETE, DROP, etc., mysql_query () retourne TRUE en cas de succès ou FALSE en cas d'erreur. "

1
cristian

mysqli_fetch_array() renvoie NULL s'il n'y a pas de ligne.

Dans un style procédural: 

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

En style orienté objet:

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

D'habitude j'utilise le === ( triple est égal à ) et __LINE__, __CLASS__ pour localiser l'erreur dans mon code:

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

voici comment je le fais, vous pouvez aussi y jeter un autre avec un dé ...

0
Adrian M Cavazos
$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

Si vous souhaitez toujours effectuer l'action si le $result est invalide: 

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

Cela représentera un 0 et la false qui est renvoyée par mysql_num_rows() en cas d'échec.

0
D. Mariano