Php 致命错误:已耗尽268435456字节的允许内存大小(尝试分配4294967296字节)

Php 致命错误:已耗尽268435456字节的允许内存大小(尝试分配4294967296字节),php,mysql,Php,Mysql,当脚本到达代码的bind部分时,我收到了以下脚本错误 错误: 致命错误:已耗尽268435456字节的允许内存大小(尝试分配4294967296字节) 代码: 它试图访问的数据库部分有许多字段要检索,尽管其中没有一个字段包含大量数据,其中大多数字段约为20个字符,描述约为300个字符 我进行了一次搜索,发现了一些答案,尽管没有一个对我有用,但代码运行在一个VPS上,内存为512MB,并且在php.ini中设置了256MB的内存限制 要分配的内存量是4GB,这对于数据库中的内容来说似乎太多了,我是

当脚本到达代码的bind部分时,我收到了以下脚本错误

错误:

致命错误:已耗尽268435456字节的允许内存大小(尝试分配4294967296字节)

代码:

它试图访问的数据库部分有许多字段要检索,尽管其中没有一个字段包含大量数据,其中大多数字段约为20个字符,描述约为300个字符

我进行了一次搜索,发现了一些答案,尽管没有一个对我有用,但代码运行在一个VPS上,内存为512MB,并且在php.ini中设置了256MB的内存限制


要分配的内存量是4GB,这对于数据库中的内容来说似乎太多了,我是不是遗漏了一些愚蠢的东西。

正常情况下,它不应该占用任何巨大的内存,因为您没有获取数据

$res = $mysqli->query("SELECT * FROM laptop_archive where name=[REPLACE THIS] limit 1")#
$res->fetch_assoc()

请尝试此选项:)

此问题似乎是由于在数据库中使用
长文本造成的,在将类型更改为
VARCHAR
后,问题已消失。

我两天前遇到此错误。据我所知,问题在于你选择的栏目的大小。在我的例子中,我选择了一个pdf,我必须将列作为一个长blob,即4294967296字节。无论文件大小如何,服务器都会分配这么多的资源来获取文件。因此,我不得不将该列更改为一个中等大小的blob,它工作正常。所以在你的例子中,它看起来像是图像。我会把它改成一个中等大小的斑点,它应该可以正常工作。否则,您必须将服务器配置为允许更大的抓取分配。

您是否隔离了这段代码并仅运行了这段代码,以确信这些是导致错误的代码行?您是否尝试将
limit 1
添加到查询的末尾,以确保只从数据库返回一行进行测试?256M对于任何PHP web进程来说都是一个很大的开销,而不是在如此小的VPS上。总的来说,我认为64M更合适,128M更适合带有大量插件的CMS系统。将
内存\u获取\u使用情况
插入代码的各个点,查看内存被占用的位置。抓取并运行代码。它提供了非常有用的分析输出,应该能够跟踪所有内存分配,以便确定问题的原因。注意,还有一个,我强烈建议你安装它推荐的图形库(我想不出这个名字),因为可视化比盯着一堵墙看更有用numbers@JamesValentine请发布一些细节作为答案,然后接受它,让其他人知道这已经解决了(那些有类似问题的人可能不需要阅读所有评论就可以找到答案)@Basic作为一个新用户,我现在很不幸地找到了答案(不记得我以前的登录详细信息)我在8小时内无法回答这个问题,然后我在24小时内无法接受我自己的答案!因此我将在明天接受它:DNot true,mysqli(以及PDO)在内部存储所有记录,以供fetchAll()使用方法。您可以使用
MYSQLI\u use\u RESULT
常量作为MYSQLI\u查询函数的最后一个参数来更改此行为。
$res = $mysqli->query("SELECT * FROM laptop_archive where name=[REPLACE THIS] limit 1")#
$res->fetch_assoc()