首页 文章

我得到2014当使用PDO执行exec时,其他无缓冲的查询处于活动状态时无法执行查询

提问于
浏览
0

我正在对多个更新执行 PDO::exec 命令:

$MyPdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);
$MyPdo->exec("update t1 set f1=1;update t2 set f1=2");

我在一个事务中做它,我不断收到以下错误:

SQLSTATE [HY000]:常规错误:2014在其他未缓冲的查询处于活动状态时无法执行查询 . 考虑使用PDOStatement :: fetchAll() . 或者,如果您的代码只是针对mysql运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲 .

这些是唯一的查询

2 回答

  • 0

    您不应将语句作为单个查询执行 . 一次执行一个:

    $MyPdo->exec("update t1 set f1=1");
    $MyPdo->exec("update t2 set f1=2");
    
  • 0

    我遇到了同样的问题,并没有找到任何解决方案:

    $pdo->exec('update....;update...;')
    $pdo->exec('update....;update...;')
    

    在php 5.3之前你可以通过destroy $ pdo关闭连接,在php 5.3中,你可以使用$ pdo-> query()来执行多查询,注意$ pdo-> exec()完成并不意味着sql server完成了执行:

    $cnt=1000;
    $sql='';
    $j=0;
    for ($i=0;$i<$cnt;++$i)
        {++$j;
         $sql.="update sem_UploadKeywordQueue set ProductCount='{$i}' where ID='{$i}';";
         if ($j==100)
            {$pdo=new PDO('mysql:host=domain.com;port=3306;dbname=db', "user", "pass");
             $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
             $pdo->exec($sql);
             $pdo=null;
             $sql='';
             $j=0;
            }
        }
    if ($sql)
       {$pdo->exec($sql);
       }
    

    为了diyism

相关问题