Num rows возвращает неправильное число

#php #mysql #mysql-num-rows

#php #mysql #mysql-num-rows

Вопрос:

Я пытаюсь подсчитать строки, в которых есть 0 строк, но в любом случае он возвращает 1 строку, когда нет строк, соответствующих SQL-запросу. Кто-нибудь знает, что я делаю не так?

         $del = mysql_real_escape_string(strip_tags($_GET['del']));

    if ($del)
    {
        $sql6 = "SELECT count(*) FROM oneliners WHERE id='$del' AND to_user='".$_SESSION['username']."'";
        $result6 = mysql_query($sql6) or trigger_error(mysql_error()."".$sql6);
        $num_rows6 = mysql_num_rows($result6);

        echo $sql6;
        echo '<br>';
        echo $num_rows6;

        //If no rows return, do this
        if ($num_rows6 <= 0)
        {
            header("location:oneliner.php");
            exit();
        }
 

Комментарии:

1. Вы уже используете count(*), поэтому он всегда будет возвращать 1 строку.

2. Вам $_SESSION[] также нужно избежать этого. Все суперглобальные объекты, которые вы вводите в sql-оператор, нуждаются в экранировании.

Ответ №1:

Запрос всегда возвращает одну строку. Строка содержит количество строк. Вы должны скорее использовать mysql_fetch_row than mysql_num_rows , где последний подсчитывает количество строк, возвращаемых запросом.

 $sql6 = "SELECT count(*) FROM oneliners WHERE id='$del' AND to_user='".$_SESSION['username']."'";
$result6 = mysql_query($sql6) or trigger_error(mysql_error()."".$sql6);
if($num_rows6 = mysql_fetch_row($result6)) {
   echo $num_rows6[0]; // Prints the number of rows
}
 

Несмотря на то, что самый простой способ решить вашу проблему — изменить ваш запрос на:

 $sql6 = "SELECT * FROM oneliners WHERE id='$del' AND to_user='".$_SESSION['username']."'";
 

Я бы настоятельно рекомендовал использовать первый вариант, потому что этот более простой способ вернет ВСЕ строки и, следовательно, будет менее эффективным.

Ответ №2:

Вы уже подсчитываете в sql-запросе. Это всегда возвращает одну строку. Даже если в таблице базы данных нет строк. Есть два способа сделать это:

  1. SELECT COUNT(*) FROM ... и это все. Больше нет необходимости в mysql_num_rows() функции. Если все, что вы хотите сделать, это получить количество строк, то этот способ быстрее.
  2. SELECT * FROM ... и вы можете использовать mysql_num_rows() функцию. Если вы все равно хотите получить все строки для отображения в таблице, а также посчитать их, то это правильный путь.

Комментарии:

1. Ах, я понимаю. Спасибо! Это устранило проблему.