PHP MySQL预处理语句:执行die,返回true或false

时间:2012-10-18 07:43:18

标签: php mysql sql prepared-statement

在这个块中,$ stmt返回非假设,$ bind为true,但是当我到$ stmt-> execute()时,它退出,并且既不返回true也不返回false。唯一一次我可以从中得到错误,如果我在参数中使用一些变量来执行它的文档,但是我从来没有在执行调用中使用过一个参数,我找不到其他人的例子除了在程序准备的陈述中使用一个。我不知道我是否遗漏了什么。有人有什么想法吗?

$stmt = $mysqli->prepare("SELECT ... FROM `table` WHERE `tid` = ?");

if ($stmt !== FALSE) {
    echo 'Statement was true.';
    $bind = $stmt->bind_param('s', $this->tid);
    echo 'after bind';
    if ($bind)
        echo 'bind was good ';
    else
        echo 'bind was bad';
    $exec = $stmt->execute();
    if ($exec)
        echo 'exec was good';
    else
        echo 'exec was bad';
    echo 'after execute';
    // etc.
} else {
 // rest of code
}

@ tntu接受的答案和以下评论让我走上正确的道路来解决这个问题。 [链接] http://stackoverflow.com/questions/5580039/fatal-error-uncaught-exception-mysqli-sql-exception-with-message-no-index-us

MySQL可以进行大量的错误报告,并且我已经在堆栈和相关函数中设置了mysqli_report(MYSQLI_REPORT_ALL),以便找出其他一些问题。 无论如何,设置mysqli_report(MYSQLI_REPORT_OFF)可以使execute按预期运行,而不会因为警告和错误而使php陷入困境。

1 个答案:

答案 0 :(得分:1)

$bind = $stmt->bind_param('s', $this->tid);

s 代表字符串

将其更改为,它应该有效。

另请参阅有关进行错误管理的信息。 mysqli_erromysqli_errno

这样的事情:

if ($mysqli->errno) { logging("ERRO: ".$mysqli->error . "( " . $mysqli->errno . " )"); }