php mysqli在嵌套循环中准备语句抛出命令或同步错误[重复]

Posted

技术标签:

【中文标题】php mysqli在嵌套循环中准备语句抛出命令或同步错误[重复]【英文标题】:php mysqli prepared statement in nested loop throwing command out or sync error [duplicate] 【发布时间】:2014-01-30 10:49:05 【问题描述】:

我有以下函数,它同时具有 for 和 while 循环来执行准备好的语句。但它抛出错误为Commands out of sync; you can't run this command now

这是我的功能

public function queryProductDetail() 

    $product_info = $this->mysqliengine->prepare("select product_id, sku from product limit 10");
    $product_info->execute();
    $product_info->bind_result($product_id,$sku);

    $product_image = $this->mysqliengine->prepare("insert into product_image(product_id,thumb_image,medium_image,original_image) values(?,?,?,?)") or die($this->mysqliengine->error);
    $product_image->bind_param('isss',$api_product_id, $thumb_image, $medium_image, $original_image);


    while($product_info->fetch()) 
        $rowResult = $this->api->queryProduct(array('serverParams' => array('sku' => $sku, 'usertoken' => USER_TOKEN)));
        foreach($rowResult->result->imagesUrls->Image as $image) 
            $api_product_id = $product_id;
            $thumb_image = $image->smallurl;
            $medium_image = $image->middleurl;
            $original_image = $image->bigurl;
            $product_image->execute();
        
    

谁能帮我解释一下为什么会这样。

这是Fatal error: Call to a member function bind_param() on a non-object$product_image->bind_param中的消息

【问题讨论】:

【参考方案1】:

C.5.2.14. Commands out of sync

这可能发生,例如,如果您使用 mysql_use_result() 并在调用 mysql_free_result() 之前尝试执行新查询。如果您尝试执行两个返回数据的查询而不在其间调用 mysql_use_result() 或 mysql_store_result(),也会发生这种情况。

$product_info->execute() 打开一个 mysql 资源,阻止新的查询。 Unbuffered Queries 可能是导致该错误的原因。 mysqli_stmt::prepare() 默认返回无缓冲结果:

Prepared 语句默认返回无缓冲的结果集。 [..] 也可以使用mysqli_stmt_store_result() 缓冲准备好的语句的结果。

【讨论】:

我不明白你的意思 如果我使用 fetch_all gettting error as Fatal error: Call to undefined method mysqli_stmt::fetch_all()

以上是关于php mysqli在嵌套循环中准备语句抛出命令或同步错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL准备好的语句在PHP中抛出错误

PHP在循环中准备语句和事务[重复]

如果在循环中使用 MySQLi 准备好的语句,我啥时候调用 bind_param?

如何使用索引号将数据发送到mysqli(准备好的语句)

什么时候在 PHP Mysqli 中使用准备好的语句? - 用户表单搜索输入与选择查询

PHP:带有“select *”的Mysqli准备语句