Цикл php while генерирует ошибку в выражении $var < 10

Итак, по какой-то причине это дает мне ошибку, как показано здесь: http://prime.programming-designs.com/test_forum/viewboard.php?board=0 Однако, если я уберу '&& $cur_row < 10' это работает отлично. Почему "&& $ cur_row <10" вызывает у меня проблему?

  $sql_result = mysql_query("SELECT post, name, trip, Thread FROM (SELECT MIN(ID) AS min_id, MAX(ID) AS max_id, MAX(Date) AS max_date FROM test_posts GROUP BY Thread ) t_min_max INNER JOIN test_posts ON test_posts.ID = t_min_max.min_id WHERE Board=".$board." ORDER BY max_date DESC", $db);
                $num_rows = mysql_num_rows($sql_result);
                $cur_row = 0;
                while($row = mysql_fetch_row($sql_result) && $cur_row < 10)
                {
                    $sql_max_post_query = mysql_query("SELECT ID FROM test_posts WHERE Thread=".$row[3]."");
                    $post_num = mysql_num_rows($sql_max_post_query);
                    $post_num--;
                    $cur_row++;
                    echo''.$cur_row.'<br/>';
                    echo'<div class="postbox"><h4>'.$row[1].'['.$row[2].']</h4><hr />' .$row[0]. '<br /><hr />[<a href="http://prime.programming-designs.com/test_forum/viewthread.php?thread='.$row[3].'">Reply</a>] '.$post_num.' posts omitted.</div>';
                }

3 ответа

Решение

Приоритет оператора - назначение (=) имеет более низкий приоритет, чем &&,

Ваша строка кода эквивалентна этой (которая, очевидно, имеет недостатки):

while($row = (mysql_fetch_row($sql_result) && $cur_row < 10))

Вы можете исправить это с помощью and оператор вместо &&или с помощью скобок.

while($row = mysql_fetch_row($sql_result) and $cur_row < 10)

или же

while(($row = mysql_fetch_row($sql_result)) && $cur_row < 10)

Реляционные и логические операторы имеют более высокий приоритет, чем операторы присваивания:

while(($row = mysql_fetch_row($sql_result)) && $cur_row < 10)

Ваша ошибка - ошибка MySQL, вызванная информацией, которую вы отправляете MySQL, чтобы указать, что нужно извлечь. Это вызвано этой строкой:

$sql_max_post_query = mysql_query("SELECT ID FROM test_posts WHERE Thread=".$row[3]."");

Есть ли причина, по которой у вас есть две "" метки в конце этой строки запроса? Что бы ни возвращалось из этого запроса, это плохо. Не уверен, почему это связано с количеством строк, но я бы начал с того места, где начинается ошибка.

Другие вопросы по тегам