发送QUERY数据包时出错

Eri*_*ana 38 php mysql

我试图将一些数据插入数据库,但我收到此错误" 发送QUERY数据包时出错 "

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

但我认为问题是数据的大小超过16MB.
列的数据类型设置为longtext,我认为可以将数据保持为4GB.

我不知道PDO是否在运行查询或将16MB数据传输到数据库时遇到问题.
这是我可以做出的唯一猜测,因为mysql可能会以数据包的形式发送数据,而数据包无法保存16MB的数据.

小智 33

您猜对了MySQL对数据大小有限制,您需要在一小组记录中打破您的查询,或者您可以通过使用更改您的max_allowed_pa​​cket SET GLOBAL max_allowed_packet=524288000;

  • 哇酷,它对我有用。我虽然它来自日志,并且还要确保在 php.ini 中检查您的 post_max_size 和 upload_max_filesize (2认同)

Fai*_*sal 27

您可以通过以下几个步骤解决此问题:

1)打开终端窗口

2)请在终端中写下以下命令

ssh root@yourIP port
Run Code Online (Sandbox Code Playgroud)

3)输入root密码

4)现在使用以下命令编辑服务器my.cnf文件

nano /etc/my.cnf  
Run Code Online (Sandbox Code Playgroud)

如果命令未被识别,请先执行此操作或尝试使用vi然后重复:yum install nano.

要么

  vi /etc/my.cnf 
Run Code Online (Sandbox Code Playgroud)

5)在[MYSQLD]部分下添加行.:

max_allowed_packet=524288000 (obviously adjust size for whatever you need) 
wait_timeout = 100
Run Code Online (Sandbox Code Playgroud)

6)Control + O(保存)然后按ENTER(确认)然后按Control + X(退出文件)

7)然后按照以下命令重启mysql服务器

/etc/init.d/mysql stop
/etc/init.d/mysql start
Run Code Online (Sandbox Code Playgroud)

8)您可以通过进入PHPMyAdmin或打开SQL命令窗口并执行:

SHOW VARIABLES LIKE 'max_allowed_packet'
Run Code Online (Sandbox Code Playgroud)

这适合我.我希望它适合你.


小智 12

如果变量wait_timeout太低,您可能也会遇到此错误.

如果是这样,您可以将其设置为更高:

SET GLOBAL wait_timeout=10;
Run Code Online (Sandbox Code Playgroud)

这是我案例中同样错误的解决方案.

  • 注意此变量的低值。我花了太多时间才意识到脚本深处的某个地方是 sleep(70);这导致数据库连接丢失,因此“发送 QUERY 数据包时出错”。因此,要么考虑将其设置为至少分钟,要么 ping() 您的数据库以保持连接有效。 (4认同)

cjh*_*ill 2

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 文档的链接。