我有这个非常简单的 PHP 代码:
$mysqli = new mysqli('localhost', 'xxx', 'xxxxx', 'xxx');
$query = "SELECT * FROM questions WHERE id = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('d', $_GET['qid']);
$stmt->execute();
$stmt->bind_result($id, $content, $correct_ans, $lol);
$stmt->fetch();
//do sth with the data
$query = "SELECT * FROM answers WHERE question_id = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('d', $_GET['qid']);
$stmt->execute();
$stmt->bind_result($id, $content, $lol);
while($stmt->fetch())
{
//do sth
}
基本上,似乎无论我做什么,第二个mysqli::prepare()
总是会返回 false,但是mysqli::error
由于某种原因是空的。任何人都可以在这里看到错误吗?
PS。这不是重复的问题;是的,已经有人问过了:MySQLi准备了返回false的语句,但作者没有费心与大家分享他的解决方案。
编辑:我想我应该解释一下:只有第二个准备返回 false,第一个绝对没问题。更奇怪的是,如果我删除第一行代码(即第一行准备),第二行将毫无问题地工作......
EDIT2:好吧,我现在只能说WTF。事实证明,如果我删除分配,(我不这样做$stmt = prepare()...)
,只是调用该函数,$mysqli->error
列表不为空 - 它显示“命令不同步;您现在无法运行此命令”。如果我执行分配, 它是空的...
EDIT3:我切换到 PDO 并且效果很好。除非我能证明不是这样,否则我会假设 MySQLi 是错误的。