2009-04-05 2 views
3

Eine Sache, die mich immer abgehört hat, ist, dass bei der Überprüfung meiner PHP-Skripte für Probleme bekomme ich die Warnung "bool-assign: Zuweisung in Bedingung" und ich bekomme sie sehr. z.B .:Warnung: Zuweisung in der Bedingung

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

Gibt es eine andere Möglichkeit, mehrere oder alle Zeilen in ein Objekt oder ein Array zu bekommen? Oder ist an dieser Methode nichts falsch?

Antwort

13

versuchen dies zu tun statt:

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

Ich glaube, php, weil der $ row = mysql_fetch_assoc ($ result) warnt keinen boolean zurück.

+2

Eigentlich ist es ein Code-Geruch - PHP kann sich nicht um den Typ des Ergebnisses kümmern, solange es nicht Runtime zu false (0, 0 oder falsch) umwandelbar ist. Ihr Skript-Checker ist nur paranoid, weil es ein Problem für Anfänger in Sprachen mit C-ähnlicher Syntax ist. –

3

Eigentlich glaube ich, es ist eine Warnung, weil Sie einen Fehler machen könnten. Normalerweise in einem bedingten, meinen Sie zu tun:

if (something == something_else) 

Aber es ist leicht, einen Fehler zu machen und gehen:

if (something = something_else) 

So Sie wahrscheinlich Warnung es. Wenn PHP etwas überhaupt wie C ist, können Sie Ihr Problem mit einem Satz von Klammern um Ihre Aussage zu beheben, etwa so:

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

glaube ich, Jeremy Antwort etwas weg ist, weil PHP lose typisiert ist und in der Regel doesn‘ sich mit solchen Unterschieden nicht beschäftigen.

+0

Ich glaube, dass unsere Antworten funktional identisch sind; Ihr sagt effektiv "while (($ row = mysql_fetch_assoc ($ result)) === true)". Ich würde argumentieren, dass das "! == false"/"=== true" zur Lesbarkeit und Argumentation für das Arbeiten mit/ohne die Klammern beiträgt. –

+0

Ja, es ist nur eine Warnung und funktioniert gut, aber ich war mir nicht sicher, ob ich eine Alternative viel einfacher Weg vermisste (auch wenn dieser Weg der einfachste für mich scheint) Grüße – Moak

+0

Ich war nur ansprechen die spezifische Warnung zur Hand. Es warnt ihn, weil es eine "Zuweisung in Bedingung" gibt, d. H. A = wo es im Allgemeinen ein == erwartet. Das lässt es einfach so sehen, was auch immer das Ergebnis des Parens ist. –

Verwandte Themen