Я получаю 2014 Не могу выполнить запросы, в то время как другие небуферизованные запросы активны при выполнении exec с PDO

Я делаю 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 ответа

Вы не должны выполнять операторы как один запрос. Выполните их по одному:

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

Я столкнулся с той же проблемой, и не нашел никакого решения:

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

До php 5.3 вы могли закрыть соединение, уничтожив $pdo, в php 5.3+ вы могли использовать $pdo->query() для выполнения мультизапроса, следя за тем, чтобы $pdo->exec() Finished не означало сервер SQL закончил выполнение:

$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

Другие вопросы по тегам