1

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++;
        }
1
  • @deceze when the inequality is removed the div works but there are no titles. When i remove the inequality, i get the div and titles Commented Jan 28, 2012 at 23:47

3 Answers 3

5

If I interpret you correctly I think you are having a precedence problem. Try this:

while (($row=mysql_fetch_assoc($query)) && ($f<4)){
Sign up to request clarification or add additional context in comments.

1 Comment

a better way is to change the order of the expressions and let $f<4 be first. It won't do a useless fetch when $f >= 4.
2

=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)){

1 Comment

Or just using AND instead of &&.
1

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){

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.