我试图将一些数据插入数据库,但我收到此错误" 发送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_packet SET GLOBAL max_allowed_packet=524288000;
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)
这是我案例中同样错误的解决方案.
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 文档的链接。