2009-08-09 5 views
3

Mon code ressemble à ceci:show message lorsque aucune ligne php mysql sélectionné

$result = mysql_query("SELECT * FROM `picdb` WHERE `picid` = '$picid' ") or trigger_error(mysql_error()); 
while($row = mysql_fetch_array($result)){ 
foreach($row AS $key => $value) { $row[$key] = stripslashes($value); } 

Le problème est que quand il n'y a pas de ligne pour sélectionner, rien ne se passe, mon tableau $ row est vide. Comment est-ce que je peux avoir ce présent un message de "aucune ligne trouvée" quand aucune ligne ne correspond à la sélection?

Répondre

17

essayer

if (mysql_num_rows($result) == 0) { 
    // Show message 
} else { 
    // do your while stuff here 
} 
+0

+1 agréable et propre –

2
if (mysql_num_rows($result) == 0) { 
    echo "Result is empty!"; 
} 

Vous devez avoir lu la description de mysql_query, il vous donne la réponse: http://php.net/mysql_query

+0

Ne fonctionne pas. $ result est une ressource qui peut être valide même si elle ne contient aucune ligne. –

+0

'$ result' est une ressource, pas un type primitif. Vous ne pouvez pas utiliser 'empty()'. –

+0

Mon mauvais, déjà changé. – deceze

8

Utilisez mysql_num_rows() pour déterminer le nombre de lignes dans votre résultat.

$result = mysql_query("SELECT * FROM `picdb` WHERE `picid` = '$picid' ") or trigger_error(mysql_error()); 

if(mysql_num_rows($result) == 0) { 
    echo "No row found!" 
} else { 
    while($row = mysql_fetch_array($result)) { 
    foreach($row AS $key => $value) { 
     $row[$key] = stripslashes($value); 
    } 
    } 
} 
2

mysql_num_rows() ne fonctionne que sur les requêtes mises en mémoire tampon. Si vous avez potentiellement un grand/énorme ensemble de résultats, vous pouvez passer à unbuffered queries et num_rows n'est plus une option.
Vous pouvez tester la valeur de retour du premier appel à mysql_fetch_array(). Si c'est FAUX, il n'y a pas d'enregistrements correspondants.

<?php 
$result = mysql_query("SELECT * FROM `picdb` WHERE `picid` = '$picid' ") or trigger_error(mysql_error()); 

$row = mysql_fetch_array($result, MYSQL_ASSOC); 
if (!$row) { 
    echo '0 rows'; 
} 
else { 
    do { 
    echo htmlspecialchars($row['x']), "<br />\n"; 
    } while($row=mysql_fetch_array($result, MYSQL_ASSOC)); 
} 

L'inconvénient de ce do {} while() est que la ligne $ = mysql_fetch ... Code a été dupliqué. Mais ce n'est qu'un petit doublet.

Questions connexes