2

我试图计算有 0 行的行,但是当没有与 SQL 查询匹配的行时,它仍然返回 1 行。有谁知道我做错了什么?

        $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();
        }
4

2 回答 2

4

查询总是返回一行。该行包含行数。您应该使用mysql_fetch_rowthan 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']."'";

我强烈建议使用第一种替代方法,因为这种更简单的方法将返回所有行,因此效率较低。

于 2011-10-31T16:37:21.027 回答
3

您已经在 sql 查询中进行计数。那总是返回一行。即使数据库表中有零行。有两种方法:

  1. SELECT COUNT(*) FROM ...就是这样。不再需要mysql_num_rows()功能。如果您只想获取行数,那么这种方式会更快。
  2. SELECT * FROM ...你可以使用mysql_num_rows()功能。如果您想获取所有行以显示在表格中并计算它们,那么这是一种方法。
于 2011-10-31T16:38:24.460 回答