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

时间:2014-01-17 22:52:37

标签: php mysql

当脚本到达此代码的绑定部分时,我收到以下错误。

错误:

  

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

代码:

$result = $dbc->prepare('SELECT make, line, model, name, year, image, processor_family, processor_speeds, shipped_ram, max_ram, ram_type, video_card, video_memory, screen_type, screen_size, hard_drives, internal_drives, external_drives, audio_card, speakers, microphone, networking, external_ports, internal_ports, description, driver_link, manufacturer_link FROM laptop_archive where name=?');

$result->bind_param('s', $name);

$result->execute();

$result->bind_result($make, $line, $model, $name, $year, $image, $processor_family, $processor_speeds, $shipped_ram, $max_ram, $ram_type, $video_card, $video_memory, $screen_type, $screen_size, $hard_drive, $internal_drives, $external_drives, $audio_card, $speakers, $microphone, $networking, $external_ports, $internal_ports, $description, $driver_link, $manufacturer_link);

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

我有一个搜索,显示了一些答案,虽然它们都没有对我有用,代码运行在一个512MB RAM的VPS上,内存限制为256MB,如php.ini中所设置。

要分配的内存量是4GB,这对于数据库中的内容来说似乎非常过分,我在这里错过了一些愚蠢的内容。

3 个答案:

答案 0 :(得分:0)

正常时间它不应占用任何大量内存,因为你没有获取数据。

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

请尝试这个:)

答案 1 :(得分:0)

问题似乎是由于数据库中LONGTEXT的使用造成的,将类型更改为VARCHAR后,问题就消失了。

答案 2 :(得分:0)

两天前我犯了这个错误。根据我所了解的问题,问题在于您选择的列的大小。在我的情况下,我选择了一个pdf,我必须列为长blob,这是4294967296字节。无论文件大小如何,服务器都会分配那么多来获取文件。所以我不得不将列更改为中等blob,它工作正常。所以在你的情况下,它看起来像是图像。我会把它改成一个中等blob,它应该工作正常。否则,您必须配置服务器以允许更大的抓取分配。