#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-запросе. Это всегда возвращает одну строку. Даже если в таблице базы данных нет строк. Есть два способа сделать это:
SELECT COUNT(*) FROM ...
и это все. Больше нет необходимости вmysql_num_rows()
функции. Если все, что вы хотите сделать, это получить количество строк, то этот способ быстрее.SELECT * FROM ...
и вы можете использоватьmysql_num_rows()
функцию. Если вы все равно хотите получить все строки для отображения в таблице, а также посчитать их, то это правильный путь.
Комментарии:
1. Ах, я понимаю. Спасибо! Это устранило проблему.