2009-11-25 43 views
0

我做多更新一PDO::exec命令做高管時,是活躍:我得到2014不能執行查詢,而其他無緩衝的查詢與PDO

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

我做它在事務中,我不斷收到以下錯誤:

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.

只有這些查詢/ IES

回答

0

你不應該執行該語句作爲一個單一的查詢。執行它們一次一個:

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

謝謝,這是我目前所做的,我需要找到是否有一種方法來保持查詢,因爲他們現在。 – 2009-11-25 15:59:48

0

我遇到同樣的問題,並沒有找到任何解決辦法:

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

之前PHP 5.3,你可以通過關閉破壞$ PDO連接,在PHP 5.3 +, 你可以使用$ pdo->查詢()來執行多查詢, 要小心,$ 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

相關問題