PHP PDO длинный SQL заявление нет ответа - PullRequest
1 голос
/ 21 октября 2011

Мы используем PHP 5.3.2, Ubuntu, MySQL 5.1.41, CodeIgniter 2.0.0 с простым драйвером PDO.

Проблема в том, что мы отправляем длинную строку (размером около 11, 12 кбайт) взапрос, ни PHP, ни MySQL не возвращает никаких ошибок или ответов.Нет синтаксических ошибок, нет предупреждений, нет ошибок HTTP, нет ничего.PHP просто продолжает «в ожидании».

Если строка данных короче на несколько килобайт, запрос выполняется, и данные корректно вставляются в базу данных.

Мы считаем, что MySQL даже не получит отправленный нами запрос, если его размер превышает ~ 11 Кбайт.

Сбой PDO::prepare или PDOStatement::execute.

Запрос:

select simpleupdatestoredprocedure(15, 'loooong string');

Вызванная функция:

function _execute($sql)
{
    $q = $this->conn->prepare($sql);
    $q->execute();

    return $q; 
}

Где $this->conn является основным объектом PDO, а $q является PDOStatement объектом.(Мы не используем какие-либо специфические элементы CodeIgniter в этой части кода.)

Есть ли какие-то скрытые настройки, ограничивающие длину данных или запросов, которые могут быть переданы?При необходимости мы найдем точное количество байтов при возникновении этой проблемы.

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Я считаю, max_allowed_packet должно быть достаточно большим, чтобы вместить весь запрос.

0 голосов
/ 21 октября 2011

Вы пробовали ловить исключения?У меня была такая же проблема с драйвером Oracle PDO, и он где-то превышал некоторый буфер.Oracle, хотя и является экспериментальным, так что, вероятно, с этим и ожидается.Вы проверили свой журнал ошибок PHP?

...