Ошибка при отправке пакета QUERY

я пытался вставить некоторые данные в базу данных, но я получил эту ошибку « Ошибка при отправке пакета QUERY »

$insertDeta = $conPat->prepare("insert into table1(data) VALUES(:data)"); $insertDeta->bindParam(':data',$data); $conPat->beginTransaction(); $insertDeta->execute(); $conPat->commit(); 

но я думаю, что проблема в том, что размер данных превышает 16 МБ.
тип данных столбца задан как longtext , который, я думаю, может хранить данные размером до 4 ГБ.

Я не знаю, есть ли у PDO проблемы с запуском запроса или передача 16 МБ данных в базу данных.
Это единственное предположение, которое я могу сделать, поскольку mysql может отправлять данные в пакеты, и пакет не может хранить данные размером до 16 МБ.

Solutions Collecting From Web of "Ошибка при отправке пакета QUERY"

Вы догадались, что у MySQL есть ограничение на размер данных, вам нужно разбить свой запрос в небольшой группе записей или вы можете изменить свой max_allowed_packet с помощью SET GLOBAL max_allowed_packet=524288000;

Вы можете решить эту проблему, выполнив следующие шаги:

1) откройте окно терминала

2) напишите следующую команду в терминале

 ssh root@yourIP port 

3) Введите пароль root

4) Теперь отредактируйте файл my.cnf на сервере, используя следующую команду:

 nano /etc/my.cnf 

если команда не распознана, сделайте это сначала или попробуйте vi, а затем повторите: yum install nano.

ИЛИ

  vi /etc/my.cnf 

5) Добавьте строку в раздел [MYSQLD]. :

 max_allowed_packet=524288000 (obviously adjust size for whatever you need) wait_timeout = 100 

6) Control + O (сохранить), затем ENTER (подтвердить), затем Control + X (файл выхода)

7) Затем перезапустите сервер mysql, выполнив команду

 /etc/init.d/mysql stop /etc/init.d/mysql start 

8) Вы можете проверить, перейдя в PHPMyAdmin или открыв окно командной строки SQL и выполнив:

 SHOW VARIABLES LIKE 'max_allowed_packet' 

Это работает для меня. Надеюсь, это сработает для вас.

Вы также можете получить эту ошибку, если переменная wait_timeout слишком низкая.

Если это так, вы можете установить его выше:

 SET GLOBAL wait_timeout 10 

Это решение для той же ошибки в моем случае.

В /etc/my.cnf добавьте:

  max_allowed_packet=32M 

Это сработало для меня. Вы можете проверить, перейдя в PHPMyAdmin и открыв окно командной строки SQL и выполнив:

 SHOW VARIABLES LIKE 'max_allowed_packet' 

Я столкнулся с редким случаем в cygwin, где я получил бы эту ошибку при выполнении exec('rsync'); где-то перед запросом. Возможно, это общая проблема PHP, но я могу только воспроизвести это в cygwin с помощью rsync.

 $pdo = new PDO('mysql:host=127.0.0.1;dbname=mysql', 'root'); var_dump($pdo->query('SELECT * FROM db')); exec('rsync'); var_dump($pdo->query('SELECT * FROM db')); 

производит

 object(PDOStatement)#2 (1) { ["queryString"]=> string(16) "SELECT * FROM db" } PHP Warning: Error while sending QUERY packet. PID=15036 in test.php on line 5 bool(false) 

Об ошибке сообщается в https://cygwin.com/ml/cygwin/2017-05/msg00272.html

Вы не можете иметь WHERE в INSERT .

insert into table1(data) VALUES(:data) where sno ='45830'

Должно быть

insert into table1(data) VALUES(:data)


Обновление : вы удалили это из своего кода (я полагаю, вы скопировали код не так). Вы хотите увеличить размер разрешенного пакета:

SET GLOBAL max_allowed_packet=32M

Измените 32M (32 мегабайта) вверх / вниз по мере необходимости. Вот ссылка на документацию MySQL по этому вопросу.