使用 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 和准备好的语句时命令不同步 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL like 语句问题

mysqli 使用 select * 和准备好的语句和查询

如何使用mysqli准备好的语句?

MySQLi:使用一个准备好的语句插入多行

mysqli 准备好的语句和 mysqli_real_escape_string

mysqli_stmt::bind_result():绑定变量的数量与准备好的语句中的字段数量不匹配