在这个块中,$ 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陷入困境。
答案 0 :(得分:1)
$bind = $stmt->bind_param('s', $this->tid);
s 代表字符串
将其更改为我,它应该有效。
另请参阅有关进行错误管理的信息。 mysqli_erro
,mysqli_errno
这样的事情:
if ($mysqli->errno) { logging("ERRO: ".$mysqli->error . "( " . $mysqli->errno . " )"); }