【发布时间】:2011-04-16 09:11:05
【问题描述】:
当我使用 PHP 从资源(查询)中获取行时,我遇到了一个非常奇怪、毫无意义且完全随机的错误。
我的开发机器是带有 Apache 2.2 的 Windows XP SP3,而 MySQL 在虚拟机上运行,使用 ubuntu 10.04,具有 768mb 内存、100GB 硬盘和 4 个逻辑内核(英特尔 q6600)。但是这个问题与 windows 上的 PHP 无关,因为我在数据库机器上运行代码时遇到了同样的错误。
我正在使用mysql 扩展(不是mysqli 或mysqlnd),但环顾四周,我找到了一个与mysqlnd 扩展相关的错误的补丁,所以我应该尝试一下。
主要问题是当我执行这个查询(一个非常大的查询,有几个派生表和超过 20 个连接)并快速处理结果并且一切顺利时,但是当我的代码花费大约 15/20 秒处理一个行块(我需要从它们之间以一种非常特殊的方式链接的行块构建一个对象,我不能改变这个,数据库不是我的,并从这个对象制作一些PDF)一段时间后(随机时间)我收到此错误“空行数据包正文”。
我使用无缓冲查询来减少内存消耗(如果我启用缓冲,我会得到大约 260MB 的已用内存)但这应该不是问题。
【问题讨论】:
-
你能显示一些代码吗?您的命令超时设置为多少?
-
问题与超时或内存限制无关,因为我已禁用第一个并将第二个设置为非常非常高的值
-
在我工作的地方,我们也在 Windows XP Pro SP3 上使用本地 Apache 2.2/PHP 5.3.3 和共享测试数据库服务器进行开发,但我们一直收到此错误。但是,我不知道其版本的共享 Apache/Linux 设置不会给出此错误,因此这可能表明问题可能是由 Apache 版本或类似的东西引起的,而不是数据库配置或使用!
-
@DanieleSalvatoreAlbano 我有确切的问题。我累了很多东西。你最后解决了吗?
-
错误信息相当笼统,问题本身是由网络连接中断触发的,这可能有多种不同的原因。您是否使用无缓冲查询?如果使用mysql客户端测试,查询是否需要很长时间才能执行?您很可能需要调整超时(如果 yiu 无法管理您正在使用的 mysql 实例,则全局在 mysql 或每个会话中)