Pas d'erreur si la ligne n'existe pas !

WRInaute impliqué
Bonjour,

J'utilise ce code :

Code:
$select= "SELECT * from animal where id = '".$id."'";
$db=mysql_query($select) or die (mysql_error());
$result = mysql_fetch_array($db);

Quand je met une id qui existe dans la table animal tout marchebien, mais quand je met une id qui n'existe pas normalement ça m'affiche une erreur mais rien ne s'affiche !!

Comment faire sans utiliser les conditions if ...
merci
 
WRInaute accro
Une query qui renvoi 0 result n'est pas une erreur MySQL.
Si maintenant un "if" supplémentaire t'ennuie, pourquoi tjs continuer de coder façon 199x ?
Exemple, ta query avec un ORM ça se résume à:
PHP:
<span class="syntaxdefault">$animal </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $animalRepo</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">find</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$id</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span>
Et ça t'éviterais les failles d'injection SQL comme dans ton exemple.
 
WRInaute impliqué
Dans ce cas, il n'a pas besoin de mysql_num_rows (attention obsolète).
Il suffit de tester $result
PHP:
<span class="syntaxdefault"><br />$db</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SELECT * from animal where id = '"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$id</span><span class="syntaxkeyword">.</span><span class="syntaxstring">"'"</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> or die </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">mysql_error</span><span class="syntaxkeyword">());<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">false </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> $result </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mysql_fetch_array</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$db</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">// il y a au moins un résultat. Si ID est une clé primaire, c'est le seul résultat.<br /></span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span>

@spout, le problème de PDO, c'est que ça n'apprend pas à coder correctement …
D'ailleurs, rien n'indique qu'il y ait une faille dans sa requête. S'il y a une ligne de ce genre :
$id = (int) $_GET["id"];
ou encore : $id = mysql_real_escape_string($_GET["id"]);
Aucun risque, PDO ou pas. Par contre, les quotes dans la requête seraient inutiles pour le premier cas.
 
WRInaute accro
Je parlais surtout d'ORM, pas spécialement PDO. Et oui ça n'exclu pas de connaitre le SQL pour savoir qd même ce que l'on fait.
 
Discussions similaires
Haut