2 votes

PHP mysql_query ne renvoie pas false

Je viens d'apprendre le PHP et j'ai quelques difficultés à comprendre mysql_query. Si je comprends bien, mysql_query est censé renvoyer FALSE si l'enregistrement n'est pas trouvé. Cependant, il semble qu'il renvoie toujours true car "FOUND !" est toujours le résultat :

$q = "SELECT * FROM users WHERE username = 'doesnotexist'";

$r = mysql_query($q);

if (!$q) {
    echo "<p>NOT FOUND!</p>";
} else {
    echo "<p>FOUND!</p>";
}

mysql_close();

Merci d'avance pour tout éclairage que vous pourrez apporter.

12voto

artlung Points 13433

mysql_query renvoie false s'il y a une erreur, pas s'il n'y a aucun résultat trouvé. Extrait de la documentation :

Pour SELECT, SHOW, DESCRIBE, EXPLAIN et d'autres instructions retournant un jeu de résultats, mysql_query() renvoie un en cas de succès, ou FALSE en cas de erreur.

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

mysql_query() échouera également et retournera FALSE si l'utilisateur n'a pas l'autorisation l'autorisation d'accéder à la ou les tables référencées par la requête.

Si vous voulez vérifier si des résultats ont été retournés par votre requête, utilisez mysql_num_rows() . Voir la documentation :

Utilisez mysql_num_rows() pour savoir comment nombre de lignes retournées par une instruction SELECT ou mysql_affected_rows() à savoir combien de lignes ont été affectées par une instruction DELETE, INSERT, REPLACE, ou UPDATE.

3voto

Jarod Elliott Points 7124

Vous vérifiez la variable '$q' (votre instruction sql) au lieu de la variable '$r' (le résultat mysql).

2voto

kylex Points 3796
if (empty($r)) {
        echo "<p>NOT FOUND!</p>";
} else {
        echo "<p>FOUND!</p>";
}

Les choses suivantes sont considérées comme vides :

"" (an empty string)
0 (0 as an integer)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)

1voto

Ok, j'ai trouvé la réponse à cette question.

Il s'agit de la version pour la mise à jour d'une base de données qui vous indique si un enregistrement était valide.

$updatequery = "update `mydb` set `userid` = '$arr[0]', `name` = '$arr[1]' where `age` = '$arr[2]'";

$updatequeryresult= mysql_query($updatequery);

$howmanyupdatedrecords = mysql_affected_rows();

if ($howmanyupdatedrecords == 0) {
echo("The update didn't update any records as no one matched an age of " .$arr[2]");
}

Cette opération va parcourir la base de données et mettre à jour toutes les personnes ayant l'âge spécifié. Si l'âge n'existe pas dans la base de données, un message sera affiché pour vous indiquer l'âge qui n'existe pas. Il faut également noter que même si la requête mysql correspond à un enregistrement, elle ne le mettra pas à jour si les données correspondent déjà à ce qui est mis à jour. Cela fait que le script renvoie "personne ne correspond à un âge" même s'il y a des personnes qui correspondent. Je ne peux qu'attribuer cela à un bug dans mysql. J'ai dit à MySQL de mettre à jour les informations, je ne vois pas pourquoi il prendrait sur lui de ne pas faire ce que je lui ai dit. ;)

0voto

jerryjvl Points 9310

Votre if (!$q) devrait être if (!$r) Je pense.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X