gpt4 book ai didi

php - INSERT : inserting multiple rows at once, 还是一条一条?

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:50 24 4
gpt4 key购买 nike

我在表格中插入多行,我收到这条消息:

MySQL server has gone away

我的查询:

INSERT INTO table
(a,b,c,d,e,f,g,h,i,j,k)
VALUES(1,2,3,4,5,6,7,8,9,10,11),(1,2,3,4,5,6,7,8,9,10,11), ...
ON DUPLICATE KEY UPDATE
c=VALUES(c),
d=VALUES(d),
e=VALUES(e),
f=VALUES(f),
g=VALUES(g),
h=VALUES(h),
i=VALUES(i),
j=VALUES(j)

是因为我在单个查询中填充了太多值吗? (我用 , 内爆的数组中有大约 5000 对值)。

如果这是原因 - 那么我应该逐行插入吗?它比一次插入它们慢吗?


PHP代码:

foreach($data as &$entry)
$entry = "('".implode("','", array(
$entry->ID,
addslashes($entry->field_1),
addslashes($entry->field_2),
...

))."')";

$data = implode(',', $data);

$query = "... VALUES{$data} ON ..."

$data 是 STD 类型对象的数组...


再次编辑:)

所以我尝试将我的 $data 分成更小的数组,每个数组包含 100 个元素:

$data_chunks = array_chunk($data, 100);
foreach($data_chunks as $data_chunk)
insert_into_db($data_chunk);

它起作用了,我不再收到那个错误了...

所以这意味着问题是非常长的查询字符串...

现在我更糊涂了:

  • 是否有查询的长度限制,或者一般的 PHP 参数?
  • 逐行插入和插入多行有什么区别吗? array_chunk() 值得吗?

最佳答案

可能是您的查询完成时间太长,mysql 超时并关闭了连接。您可以更改系统变量以等待更长时间。

http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

关于php - INSERT : inserting multiple rows at once, 还是一条一条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com