2009-11-25 6 views
0

que je fais une commande PDO::exec sur plusieurs mises à jour:je reçois 2014 ne peut pas exécuter des requêtes alors que d'autres requêtes unbuffered sont actives lorsque vous faites exec avec AOP

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

Je le fais dans une transaction, et je continue à obtenir la erreur suivant:

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

ce sont les seules requêtes/s

Répondre

0

Vous ne devriez pas exécuter les instructions comme une seule requête. les exécuter un à la fois:

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

Merci, c'est ce que je fais actuellement, je dois trouver s'il existe un moyen de garder les requêtes comme elles le sont maintenant. –

0

j'ai rencontré le même problème, et n'a pas trouvé de solution:

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

Avant PHP 5.3, vous pouvez fermer la connexion par détruire pdo de $, en php 5.3 +, vous pouvez utiliser $ PDO-> query() pour exécuter plusieurs requêtes, prendre soin que PDO- $> exec() fini ne signifie pas que le serveur SQL terminé l'exécution:

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

pour diyism

Questions connexes