Я пытаюсь вставить большой сериализованный объект в базу данных MySQL, используя PDO. Попытка вставить непосредственно дает:Как вставить сжатые данные с помощью PDO?
PDOStatement::execute() [pdostatement.execute]: SQLSTATE[08S01]: Communication link failure: 1153 Got a packet bigger than 'max_packet_allowed' bytes
Там, кажется, несколько возможных способов решения этого, но моя первая липкость является gzcompress
, в результате чего его вниз от 2383731 до 155955 байт (используя уровень сжатия 6). Но я теперь изо всех сил, чтобы вставить результат по другой причине:
PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'lob) VALUES ('
[некоторые двоичные данные свергнула здесь]'
Вот основная суть кода:
$value = gzcompress(serialize($lob));
$stmt = $conn->prepare("INSERT INTO saved (lob) VALUES (:value)");
$stmt->bindParam(':value', $value, PDO::PARAM_LOB);
$stmt->execute();
Примеры в documentation все, кажется, используют потоки файлов, а не двоичные данные, хранящиеся в строке, поэтому не уверен, что это действительно. Может ли кто-нибудь посоветовать?
Какое значение имеет [PDO :: ATTR_EMULATE_PREPARES] (http://www.php.net/manual/en/pdo. setattribute.php)? Взгляните на http://stackoverflow.com/questions/10113562/pdo-mysql-use-pdoattr-emulate-prepares-or-not (принятый ответ). – VMai
Не уверен, что он по умолчанию, но попытался установить его как true, так и false и увидел ту же ошибку для обоих. –