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 属性来启用查询缓冲。

这些是唯一的查询/ies

4

2 回答 2

0

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

$MyPdo->exec("update t1 set f1=1");
$MyPdo->exec("update t2 set f1=2");
于 2009-11-25T15:53:26.007 回答
0

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

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

在 php 5.3 之前你可以通过销毁 $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);
   }

为自我主义

于 2010-03-05T06:20:58.490 回答