Warning: Assignment in condition

2019-06-24 02:35发布

问题:

One thing that has always bugged me is that when checking my php scripts for problems I get the warning "bool-assign : Assignment in condition" and I get them a lot. e.g.:

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

Is there a different way to get multiple or all rows into an object or array? Or is there nothing wrong with this method?

回答1:

try doing this instead:

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

I believe php is warning because of the $row = mysql_fetch_assoc($result) not returning a boolean.



回答2:

Actually, I believe it's warning because you could be making a mistake. Normally in a conditional, you mean to do:

if (something == something_else)

But it's easy to make a mistake and go:

if (something = something_else)

So it's likely warning you. If PHP is anything at all like C, you can fix your problem with a set of parentheses around your statement, like so:

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

I believe Jeremy's answer is slightly off, because PHP is loosely typed and generally doesn't bother with such distinctions.