【问题标题】:MySQL Insert query fails with too much data [closed]MySQL插入查询因数据过多而失败[关闭]
【发布时间】:2018-01-05 04:36:09
【问题描述】:

我正在尝试使用以下基本代码将大量数据插入 MySQL 数据库:

$query = "INSERT INTO PublicNoticesTable (url, county, paperco, date, notice, id) VALUES " . $queryString;
$result = mysqli_query($connect, $query);

$queryString 是预先生成的,包含数千行信息,格式为:

('a', 'b', 'c'),('a', 'b', 'c');

这样我可以在一个 mysql 调用中插入多行数据并减少处理时间。我有能力限制进入$queryString 的信息量,当我的信息量较少时,查询成功。耶!当我输入太多信息时,查询失败。如果有人可以为我提供解决方案,将不胜感激。我正在使用 GoDaddy 和 PHPMyAdmin,如果这很重要的话。

谢谢!

【问题讨论】:

  • 查询失败会出现什么错误?
  • 请显示失败的查询并显示要调试的错误消息
  • 没有错误信息?如果有我不知道如何检索它。我只知道$result 返回 false
  • 至少写下失败的查询,因为我们无法理解你的意思,信息太少了..我的意思是一个带有硬编码值的示例查询
  • 如果返回false,那么你需要在查询中使用mysqli_error($connect),看看是否有任何结果。

标签: php mysql


【解决方案1】:

如果您尝试使用INSERT ... VALUES 模式插入值,那么您有max_allowed_packet 的限制。当我输入太多信息时,查询会失败,那么为什么不现在调试mysqli_error($connect)

来自文档:

为了优化插入速度,将许多小操作合并到一个 大手术。理想情况下,您建立一个连接,发送数据 一次处理许多新行,并延迟所有索引更新和一致性 检查到最后。

MySQL 客户端或 mysqld 服务器收到大于max_allowed_packet 字节的数据包,它发出 Packet too large 错误并关闭连接。

尝试查看数据包的最大大小是多少

show variables like 'max_allowed_packet';

SQL 长度默认限制为 1M,可以更改 max_allowed_packet参数支持更大的单次插入。

【讨论】:

【解决方案2】:

您可以确保列的最大长度足以合并您的数据。如果您的数据真的很长(每列超过 10,000 个字符),您可以尝试使用 blob。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    相关资源
    最近更新 更多