【问题标题】:Prepared statements error准备好的语句错误
【发布时间】:2011-11-12 11:09:20
【问题描述】:

在调试过程中,我注意到脚本在$stmt->fetch() or die($stmt->error); 行中终止。 PHP 日志中没有错误。它也不会回显任何错误。您在代码中看到任何错误的部分吗?

$stmt = $db->prepare("SELECT e.msg_subject AS subject, e.msg_text AS text, u.fname AS firstname, u.lname AS lastname FROM emails AS e, users AS u WHERE e.msg_status=? AND e.msg_type=? AND u.id=?") or die($db->error);
    $stmt->bind_param("isi", $status, $type, $userid) or die($stmt->error);
    $stmt->execute() or die($stmt->error);
    $stmt->bind_result($subject, $text, $firstname, $lastname) or die($stmt->error);
    $stmt->fetch() or die($stmt->error);
    $stmt->close();

【问题讨论】:

    标签: php mysql mysqli prepared-statement fetch


    【解决方案1】:

    问题在于,如果 SQL 语句没有检索到任何行,$stmt->fetch() 将返回布尔值 FALSE。所以,你必须检查行数:

    if ($stmt->num_rows > 0) {
        $stmt->fetch() or die($stmt->error);
    }
    

    【讨论】:

    • 不。我不认为。它将返回所有给定用户的消息,具有给定的状态和类型。
    • 现在if ($stmt->rowCount() > 0) {线上的错误调用未定义方法mysqli_stmt::rowCount()
    • 哦,对不起,我写的是 PDO 风格的。使用num_rows 属性:$stmt->num_rows
    猜你喜欢
    • 2014-06-18
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多