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属性を設定してクエリバッファリングを有効にすることができます。

それらは唯一のクエリです

4

2 に答える 2

0

ステートメントを単一のクエリとして実行しないでください。一度に 1 つずつ実行します。

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

I encountered the same problem, and haven't found any solution:

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

Before php 5.3 you could close connection by destroy $pdo, in php 5.3+, you could use $pdo->query() to execute multi-query, take care that $pdo->exec() finished does not mean the sql server finished the execution:

$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);
   }

for diyism

于 2010-03-05T06:20:58.490 に答える