【问题标题】:mysql_num_rows() returns 0 and I can't figure out whymysql_num_rows() 返回 0,我不知道为什么
【发布时间】:2015-05-02 14:26:21
【问题描述】:

我不知道问题出在哪里,mysql_num_rows() 总是返回 0。

这是我的代码:

$result = mysql_query("SELECT * FROM users WHERE banned='0'");

if(mysql_num_rows($result) == 0) {
    die("INTERNAL SERVER ERROR!");
}

while ($array = mysql_fetch_array($result)) {   
    if(count($array) == 0) { 
        echo "<tr>";
            echo "<td>No Data</td>";
            echo "<td>No Data</td>";
            echo "<td>No Data</td>";
            echo "<td>No Data</td>";
        echo "</tr>";
    } else {
        echo "<tr>";
            echo "<td>" . $array['id'] . "</td>";
            echo "<td>" . $array['name'] . "</td>";
            echo "<td>" . $array['email'] . "</td>";
            echo "<td>" . $array['pont'] . "</td>";
            echo "<td>" . $array['rang'] . "</td>";
            echo "<td>Bann!</td>";
        echo "</tr>";
    }

}

我的代码总是返回:

内部服务器错误!

为什么我的查询总是失败?有什么问题,我该如何解决?

【问题讨论】:

  • 1. 总是出现错误 你得到什么错误? 2. 当前的输出是什么?您期望它是什么?
  • 错误:内部服务器错误!问题是您无法从表中检索数据,我认为一切都很好
  • 首先不要使用 mysql_* 他们被贬低了。使用 mysqli_* 或 PDO。第二次尝试得到正确的错误。就在查询写入或死亡(mysql_error('您的数据库连接对象'))之后。并输入您的完整代码。
  • 好的,我试试。谢谢!
  • ^^ 返回零行是不是错误状态,所以你不应该在那里报告错误。

标签: php mysql sql database pdo


【解决方案1】:

好吧,既然您的代码不起作用并且您使用已弃用的 mysql_*,我认为这是将代码更改为 mysqli_* prepared statementPDO 的最佳机会,它们更安全.

所以你的代码看起来像这样:

<?php

    $databaseHost = "localhost";
    $databaseName = "DBNAME";
    $databaseUser = "root";
    $databasePass = "";

    try {

        $dbh = new PDO("mysql:host=" . $databaseHost .";dbname=" . $databaseName, $databaseUser, $databasePass);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $stmt = $dbh->prepare("SELECT * FROM users WHERE banned=:bannedState");
        $stmt->execute(["bannedState" => 0]);

    } catch(PDOException $e) {
        echo $e->getMessage();
    }

?>

<table border='1'>
<?php

    if($stmt->rowCount() == 0) {
        echo "<tr>";
            echo "<td>No Data</td>";
            echo "<td>No Data</td>";
            echo "<td>No Data</td>";
            echo "<td>No Data</td>";
        echo "</tr>";
    } else {
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
                echo "<td>" . $row['pont'] . "</td>";
                echo "<td>" . $row['rang'] . "</td>";
                echo "<td>Bann!</td>";
            echo "</tr>";
        }   
    }

?>
</table>

旁注:

在文件顶部添加error reporting 以获得有用的错误消息:

<?php
    ini_set("display_errors", 1);
    error_reporting(E_ALL);
?>

仅在暂存时提供错误报告,从不在生产中!

【讨论】:

  • 请解释downVote,以便我改进我的答案!
  • imo 参数 id 应该有另一个名称,而且您忘记了 execute 数组中的 :。 ($stmt-&gt;execute([":id" =&gt; 0]);)
  • @DarkBee 同意这个名字(会改);但是冒号不是必需的,没有它也可以使用
  • 不知道.. 很有趣,因为我在从头开始编码时总是犹豫要不要添加它。 (我没有对此表示反对)
猜你喜欢
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2018-01-05
  • 2023-03-20
  • 2016-08-07
  • 2021-06-15
相关资源
最近更新 更多