我的数据库中有一个存储过程,它返回一个表中的所有记录:
CREATE PROCEDURE showAll()
BEGIN
SELECT * FROM myTable;
END
SP 按预期工作。但是,如果我在 php 脚本中调用它,然后再次尝试查询数据库,它总是会失败:
// $mysqli is a db connection
// first query:
if (!$t = $mysqli->query("call showAll()"))
die('Error in the 1st query');
while ($r = $t->fetch_row()) {
echo $r[0] . "<br>"; // this is ok
}
$t->free(); // EDIT (this doesn't help anyway)
// second query (does the same thing):
if (!$t = $mysqli->query("SELECT * from myTable"))
die('Error in the 2nd query'); // I always get this error
while ($r = $t->fetch_row()) {
echo $r[0] . "<br>";
}
值得注意的是,如果我交换两个查询(即我在最后调用存储过程),它可以正常工作而不会出现任何错误。在第二个查询之前关闭()结果无济于事。 一些提示?
编辑:mysqli::error() 是:«命令不同步;您现在无法运行此命令»。
最佳答案
mysqli.query 的 php.net/manual 条目上的评论已更新,现在包括对此的回答。总结一下,在 $t->close() 之后调用 $mysqli->next_result()。感谢 petrus.jvr!
关于PHP:如果我在调用结果存储过程后再次使用 mysqli::query(),则“命令不同步”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4997601/