【发布时间】:2014-02-07 11:11:24
【问题描述】:
当脚本到达此代码的绑定部分时,我收到以下错误。
错误:
致命错误:允许的内存大小为 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 上,并且在 php.ini 中设置的内存限制为 256MB。
要分配的内存量是 4GB,这对于数据库中的内容来说似乎非常多,我在这里错过了什么愚蠢的东西吗?
【问题讨论】:
-
您是否隔离了这部分代码并仅运行,以确信这些是导致错误的行?您是否尝试在查询末尾添加
limit 1,以确保从数据库中只返回一行以进行测试? -
256M 对于任何 PHP Web 进程来说都是很多,更别提在这么小的 VPS 上的进程了。总的来说,我认为 64M 更合适,并且(在一段时间内)128M 更适合具有大量插件的 CMS 系统。将
memory_get_usage插入到您的代码中的各个位置,以查看该内存被吞噬的位置。 -
@JamesValentine 请发布一些详细信息作为答案,然后接受它,以便其他人知道这已经解决(有类似问题的人可能无需阅读所有 cmets 就可以找到答案)
-
@Basic 不幸的是,作为新用户,我现在已经给出了答案(不记得我的旧登录详细信息)我在 8 小时内无法回答这个问题,然后我无法接受我自己的回答24小时!所以我明天会接受它:D