使用 mysqli 和准备好的语句时命令不同步 [重复]
Posted
技术标签:
【中文标题】使用 mysqli 和准备好的语句时命令不同步 [重复]【英文标题】:Commands out of sync when using mysqli and prepared statements [duplicate] 【发布时间】:2011-04-15 18:02:31 【问题描述】:我正在尝试进行一些调用,但第二次查询失败,命令“命令不同步;你现在不能运行这个命令”的错误。
代码如下所示:
$sql="call listReport();";
$results = mysqli_query($link,$sql);
$arr=array();
while($row=mysqli_fetch_array($results))
array_push($arr,$row);
mysqli_free_result($results);
// then I have this
// but this fails, giving the above mentioned error
$stmt = @mysqli_prepare($link,"select ........") or die(mysqli_error($link));
@mysqli_stmt_bind_param($stmt, 's', $s);
@mysqli_stmt_execute($stmt);
@mysqli_stmt_bind_result($stmt, $s);
@mysqli_stmt_fetch($stmt);
@mysqli_stmt_close($stmt);
我实际上使用了mysqli_free_result($results);
,但没有用。我错过了什么?
【问题讨论】:
你能用这段代码重现错误吗?您将$row
推送到未定义的$arr
,而$arrows
未使用。不要使用@
抑制错误,任何错误消息都会有所帮助。 (也许是一个有用的链接:explanation of this error on the MySQL website。)
第二组第一种方法失败,die节点打印错误。
【参考方案1】:
问题是mysql存储过程可以返回各种结果集,所以应该使用mysqli_multiquery
【讨论】:
程序只有1个选择。 这不仅仅是在您的过程中只有一个选择,如果您阅读 MySQL 文档,您会看到“要编写使用 CALL SQL 语句执行存储过程产生结果集的 C 程序,必须启用 CLIENT_MULTI_RESULTS 标志。"以上是关于使用 mysqli 和准备好的语句时命令不同步 [重复]的主要内容,如果未能解决你的问题,请参考以下文章