2009-04-05 13 views
3

Une chose qui m'a toujours dérangé est que lorsque je vérifie mes scripts php pour des problèmes, je reçois l'avertissement "bool-assign: Affectation en condition" et je les reçois beaucoup. .: par exempleAttention: Affectation dans la condition

$guests = array(); 
$sql = "SELECT * FROM `guestlist`"; 
$result = mysql_query($sql); 
while($row = mysql_fetch_assoc($result)) 
    $guests[] = $row['name']; 

est-il une autre façon d'obtenir plusieurs ou toutes les lignes dans un objet ou un tableau? Ou n'y a-t-il rien de mal avec cette méthode?

Répondre

13

essayer de faire ceci:

$guests = array(); 
$sql = "SELECT * FROM `guestlist`"; 
$result = mysql_query($sql); 
while(($row = mysql_fetch_assoc($result)) !== false) 
    $guests[] = $row['name']; 

je crois que php est mise en garde en raison de la ligne $ = mysql_fetch_assoc ($ result) ne pas retourner un booléen.

+2

En fait, c'est une odeur de code - PHP ne se soucie pas du type de résultat tant que ce n'est pas runtime convertible en false ("0", 0 ou false). Votre vérificateur de script est juste en train d'être paranoïaque parce que c'est un problème courant pour les débutants dans les langages avec une syntaxe semblable à C. –

3

En fait, je crois que c'est un avertissement parce que vous pourriez faire une erreur. Normalement, dans un conditionnel, vous voulez dire faire:

if (something == something_else) 

Mais il est facile de faire une erreur et aller:

if (something = something_else) 

Il vous avertit probable. Si PHP est rien du tout comme C, vous pouvez régler votre problème avec un ensemble de parenthèses autour de votre déclaration, comme suit:

while(($row = mysql_fetch_assoc($result))) 

Je crois que la réponse de Jeremy est légèrement, parce que PHP est faiblement typé et généralement n » t dérange avec de telles distinctions.

+0

Je crois que nos réponses sont fonctionnellement identiques; le vôtre dit effectivement "while (($ row = mysql_fetch_assoc ($ result)) === true)". Je dirais que le "! == false"/"=== true" ajoute à la lisibilité et au raisonnement pour le travail avec/sans les parenthèses. –

+0

Oui c'est juste un avertissement et fonctionne bien, mais je ne savais pas si je manquais une alternative beaucoup plus simple (même si cette façon semble la plus simple pour moi) Cordialement – Moak

+0

Je parlais juste de l'avertissement spécifique à portée de main. Il l'avertit parce qu'il y a une «affectation en condition», c'est-à-dire a = où il s'attend généralement a ==. Cela le fait juste voir comme n'importe quel résultat de la parens. –