2009-09-22 7 views
0

J'ai une simple instruction SQL et je voudrais effectuer une action différente en fonction du nombre de lignes retournées.php + problème de mysql_num_rows?

$result_lists = mysql_num_rows(mysql_query("SELECT * FROM db_table")); 
    //To see the number returned 
    print_r($result_lists); 

    switch($result_lists) { 
     case($result_lists == 0): 
     //To prove which option is actually happening 
     print_r('lists==0: '.$result_lists); 
     break; 

     case($result_lists > 1): 
     //To prove which option is actually happening 
     print_r('lists>1: '.$result_lists); 
     break; 

     case($result_lists == 1): 
     //To prove which option is actually happening 
     print_r('lists==1: '.$result_lists); 
     break; 
    } 

Si 1 ou plusieurs ligne est trouvée, le cas correct est utilisé, cependant, si aucune ligne sont renvoyés, pour une raison quelconque (> 1) cas est effectuée.

Quelqu'un peut-il voir ce qui pourrait mal se passer?

Un conseil apprécié.

Merci.

+1

S'il vous plaît ne validez pas une réponse rapide, laissez les gens répondre. Btw cette réponse pourrait fonctionner, mais c'est toujours une mauvaise réponse. L'instruction switch –

Répondre

-4

Retourne zéro ou null, vous devez vérifier

case($result_lists == 0 or null): 

ou peut-être

case(empty($result_lists)): 
+1

ne fonctionne pas de cette façon. Mauvaise réponse et -1 pour moi. –

1

Vous ne devriez pas utiliser l'interrupteur comme ça.

switch($var) 
{ 
    case 1: 
     //Some stuff 
     break; 
    case 2: 
     //Some stuff 
     break; 
    default: 
     break; 
} 

C'est la bonne façon de procéder. Utilisez ifs et elses pour le faire, et yadayda! Votre bug disparaîtra.

Pourquoi? Parce que case n'est pas faite pour évaluer les déclarations. Il compare seulement ce qui est dans le switch avec ce qui est dans le case.

8

Vous abusez l'instruction switch - vous devez le remplacer par if s ou modifier comme ceci:

switch ($result_lists) 
{ 
    case 0: 
     //To prove which option is actually happening 
     print_r('lists==0: '.$result_lists); 
     break; 

    case 1: 
     //To prove which option is actually happening 
     print_r('lists==1: '.$result_lists); 
     break; 

    default: 
     //To prove which option is actually happening 
     print_r('lists>1: '.$result_lists); 
     break; 
} 

ce que vous faites en ce moment est comme ceci:

case($result_lists == 0): 

// is like doing 
if ($result_lists == ($result_lists == 0)) 

// which when $result_lists = 0 is the same as 

if ($result_lists == true) 
if (0 == 1) 
// therefore false so it drops through to the next statement 

case($result_lists > 1) 
// the same as 
if ($result_lists == ($result_lists > 1)) 
// when $result_lists = 0: 
if ($result_lists == false) 
if (0 == 0) 
+0

+1 pour plus d'explications que j'ai donné. Et j'ajouterais +1 de plus si je le pouvais pour la ligne de code du robot: 'if (0 == 0)': D –