Php mysqli_查询中的最大查询长度

Php mysqli_查询中的最大查询长度,php,mysqli-multi-query,Php,Mysqli Multi Query,在PHP中,如何确定函数mysqli_multi_query(或mysqli_query)接收的最大$query参数? 我有一个php程序,它生成一个由UPDATESQL命令组成的大字符串,用“;”分隔问题是,如果该字符串超过一定长度,mysqli_查询将生成类似“MySQL服务器已消失”的错误。我注意到那个长度似乎在1MB左右,但我如何探测它,以确保我永远不会超过那个长度 该脚本需要在大约25个字段上运行大约7000个更新。一次执行一个更新的速度非常慢,连接多个更新的速度要快得多 是否有可能更

在PHP中,如何确定函数mysqli_multi_query(或mysqli_query)接收的最大$query参数? 我有一个php程序,它生成一个由UPDATESQL命令组成的大字符串,用“;”分隔问题是,如果该字符串超过一定长度,mysqli_查询将生成类似“MySQL服务器已消失”的错误。我注意到那个长度似乎在1MB左右,但我如何探测它,以确保我永远不会超过那个长度

该脚本需要在大约25个字段上运行大约7000个更新。一次执行一个更新的速度非常慢,连接多个更新的速度要快得多

是否有可能更快地运行多个查询


谢谢你的建议

您应该查看MySQL错误日志。

如果您无法访问计算机(托管等),您可以向管理员或帮助热线索取该日志

MySQL支持非常大的查询。我不确定是否有任何限制,但当您使用网络时,您可能会遇到数据包大小的问题

您可以在MySQL配置中检查
--max\u allowed\u packet
,并尝试设置更大的数据包大小。我不确定默认配置,但它可能是1MB,这可能太小,无法一次查询7000个更新

MySQL可能需要更多的RAM来处理这样的查询。

如果您不能重新配置MySQL,那么您必须以某种方式将大查询拆分为小查询

您还可以阅读本手册以了解更多信息:

你问:

是否有可能更快地运行多个查询

这个问题没有简单的答案。它取决于查询、数据库模式等

在大多数情况下,增加配置文件中的MySQL缓存大小可能会有很大帮助,因为数据库引擎将在RAM内存上运行,而不是在硬盘上运行。当使用大缓存时——有时第一个大查询可能会比较慢,因为数据尚未加载到RAM中,但当它最终加载时——需要大量读/写操作的查询将工作得更快

以后添加: 我假设您的数据处理需要php deserialize()函数,这在纯SQL中可能很难实现,您必须在php中实现:)如果您可以访问服务器控制台,您可以创建cron(linux Scheduler)作业,该作业在夜间从shell调用php脚本

以后添加
在评论中讨论之后,我还有一个想法。您可以从phpmyadmin进行完整数据库或一个表备份,下载它,在家庭计算机上恢复数据(在Windows上,您可以使用XAMPP、WAMP服务器)。在家用计算机上,您可以运行mysql.exe并在本地处理数据。

我在INSERT语句中发现了16个字段/值对的限制。超过这个数字,我犯了一个“禁止”的错误。我在工作语句上的INSERT语句总长度为392个字符。

使用for循环来执行任何大量工作,只需使用常规mysqli\u查询即可。我收到了16000多个这样的查询。php.ini文件中的某些内容也必须更改。post mb大小需要更改。如果你发送了大量的字符,就尽可能让它变大。如果您发送了许多不同的变量,那么var input max也应该更改。使php内存更大。确保在运行查询时没有耗尽系统内存。如果你做的每件事都正确,你可以发送超过20000个查询。将php内存设置为至少256mb。如果发送大量查询,有时可能需要将超时时间从30和60增加到200或更高。如果你不改变任何设置,即使一切都是真的,你的帖子也会失败。如果超出任何PHP.ini设置限制/最大值,PHP将使脚本条件为false。您不必逐个更改任何mysql设置。如果插入或更新超过1000个查询,则需要一些时间。

我认为这不是字符串的长度,而是执行所有语句所需的时间。如果我在phpmyadmin中运行它,它将在3秒钟内运行。请再次阅读我的答案。在你接受我的帖子后,我添加了一些关于“多个查询甚至更快”的内容。我想记录对该站点的访问,并使用一个表,其中包含第一个字段,如ID、get、post、服务器、cookies。我在访问时将序列化变量存储在thosed字段中。当我访问日志时,我对这些字段进行反序列化(此时我运行了7000个更新),并将它们写入辅助字段,如server\u HTTP\u REFERER、server\u REMOTE\u IP或post\u page。我想导出表格并在电子表格中进行分析。你能重新配置那个服务器吗?我想把更新保存在一个大的SQL文件中,并用mysql命令运行它,但我不认为我能从php运行命令行。。。。我假设-你不能在插入过程中处理这些数据,因为这可能会破坏网站的性能,对吗?我认为你应该把它们分成10-50个查询组,然后在某个循环中一个接一个地运行它们。这需要一些时间,但日志分析不是一项经常性的操作,您可以在睡觉前运行它:)另一个选择是在家庭计算机上进行数据库备份和恢复(正如我在回答中所写的)。我不知道您的问题在哪里?