PHP / mysqli多个select语句激活失败

时间:2017-11-15 09:09:42

标签: php mysql mysqli

我正在修改一些网页以使用mysqli中的预处理语句,而不仅仅是mysqli :: query(),而且看起来我不能激活多个select语句。

也就是说,我有一些像这样的代码(在这个例子中简化了查询,即删除了任何连接或WHERE和ORDER):

$q=$DB->prepare("SELECT * from Table1");
if (!$q->execute())
   some_error_function();
$res=$q->get_result();

$q2=$DB->prepare("SELECT * from Table2");
if (!$q2->execute())
   some_error_function();
$res2=$q2->get_result();

combine_and_present_result($res1,$res2);

然而,它在$ q2-> execute()行上挽救,并且要明确:some_error_function()不会运行,而是我的apache错误日志报告它无法调用execute()一个非对象。即$ q2->准备失败。

添加更多错误输出我发现我准备的错误是:

PREPARE FAILED - 2014 = Commands out of sync; you can't run this command now

我不明白这一点;我没有使用事务,并且查询是非阻塞的选择,此外,它们位于不同的(innoDB)表上。我正在使用不同的变量,所以我认为这两件事应该是独立的。

当然,有一些解决方法(例如我不确定在我完成$ res-> free()之前我是否可以安全地发出q-> close(),但是我可以把所有的结果,所以传递数组,而不是mysqli_results到combine_and_present_result)但我不明白为什么这是失败的,我想知道问题是什么,而不是避免它。

有人有什么想法吗?

0 个答案:

没有答案