Reputation: 4041
The following code works fine when i remove the && $f<4
, but with it in, it doesn't work.
PHP:
$titles=array();
$f=0;
while ($row=mysql_fetch_assoc($query) && $f<4){ //this line doesn't work
$titles[]=$row['questiontitle'];
echo "<div class='questionPreview'>$titles[$f]</div>";
$f++;
}
Upvotes: 1
Views: 176
Reputation: 237847
=has lower precedence than
&&. This means that the &&
operator is evaluated first.
This means that your code, in effect, looks like this:
while ($row = (mysql_fetch_assoc($query) && $f<4)){ //this line doesn't work
So, in other words, do the MySQL query and the comparison, and if they are both true, set $row
to true
; otherwise, set it to false
.
You need to use brackets to ensure that the right operations are done:
while (($row=mysql_fetch_assoc($query)) && ($f<4)){
Upvotes: 2
Reputation: 70460
That is probably because $row
is true
rather then the array:
$ php -r 'var_dump($row = pow(2,2) && true,$row);'
bool(true)
bool(true)
$ php -r 'var_dump($row = pow(2,2) && false,$row);'
bool(false)
bool(false)
(pow
being a random function here)
That is because &&
has a higher precedence then =
. As always, solve with ()
:
while ( ($row = mysql_fetch_assoc($query) ) && $f<4){
Upvotes: 1
Reputation: 374
If I interpret you correctly I think you are having a precedence problem. Try this:
while (($row=mysql_fetch_assoc($query)) && ($f<4)){
Upvotes: 5