Propel ORM: PDOException «Невозможно создать больше операторов max_prepared_stmt_count»Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Propel ORM: PDOException «Невозможно создать больше операторов max_prepared_stmt_count»

Сообщение Anonymous »

У меня большая база данных MySQL. Я хочу получить сразу 100 строк, пока не будет обработана вся БД.

Код: Выделить всё

protected function doEcho($msg){
static $time, $start;
if (!$start) $start = time();

if (time() - $time > 0) {
echo $msg . "\n\n";
$time = time();
}
}

// ZF2 action
public function stuffAction() {
$request = $this->getRequest();
if (!$request instanceof ConsoleRequest){
throw new \RuntimeException('You can only use this action from a console!');
}

// Propel ORM generated Model UserQuery
$q = \UserQuery::create()->limit(100)->filterByProcessed(0);
$users = $q->find();

while ($users->count() ) {
foreach ($users as $user) {
$id = $user->getId();
$email = $user->getEmail();
$password = $user->getPassword();
$this->doEcho("$id - $email - $password");
// do stuff and set processed to 1
}

$q = \UserQuery::create()->limit(100)->filterByProcessed(0);
$users = $q->find();
}
}
Я получаю следующее исключение:

Код: Выделить всё

======================================================================
The application has thrown an exception!
======================================================================
Propel\Runtime\Exception\PropelException
Unable to execute SELECT statement [SELECT user.ID, user.EMAIL, user.PASSWORD, user.PHONE, user.IP, user.PROCESSED, user.WHEN FROM `user` WHERE user.PROCESSED=:p1 LIMIT 100]
----------------------------------------------------------------------

// debug backtrace

======================================================================
Previous Exception(s):
======================================================================
PDOException
SQLSTATE[42000]: Syntax error or access violation: 1461 Can't create more than max_prepared_stmt_count statements (current value: 16382)
----------------------------------------------------------------------

// debug backtrace
Очевидно, причина в следующем:

Приложение, подключающееся к базе данных, было подготовка операторов sql
, их выполнение, а затем не закрытие.

Как мне заставить Propel закрывать операторы? Я использую Propel 2: "propel/propel": "2.0.*@dev"

Подробнее здесь: https://stackoverflow.com/questions/257 ... unt-statem
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»