首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqli_query单次查询导致PHP致命错误:允许内存耗尽

mysqli_query单次查询导致PHP致命错误:允许内存耗尽
EN

Stack Overflow用户
提问于 2018-07-27 02:47:33
回答 1查看 1.6K关注 0票数 0

我有一个Mysql表(名为"base"),其中包含300万条记录,该表仅由3 int(10)字段组成。

当我尝试运行这个简单的查询$result = mysqli_query($db, 'SELECT * FROM base')时,php显示了错误:

PHP致命错误:第17行C:\xampp\htdocs\combina.php中允许内存大小为134217728字节(试图分配10485768字节)

我认为mysqli_query不应该将所有表记录加载到内存中,对吗?

那么为什么内存溢出呢?

我在Windows10上使用XAMPP安装,PHP7.2.

以下是代码:

代码语言:javascript
复制
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "comb";

$db = mysqli_connect($servername, $username, $password, $dbname);
if (!$db) {
    die("Falha na conexão: " . mysqli_connect_error());
}
$result = mysqli_query($db, 'SELECT * FROM base');
EN

回答 1

Stack Overflow用户

发布于 2018-07-27 14:07:04

我研究并认识到,mysqli_query命令实际上将所有记录加载到内存中。也就是说,对于大型表,它实际上会产生内存限制。

我找到的解决方案是使用查询 (它将激活查询而不加载RAM中的所有记录)、结果 (将返回结果对象而不是缓冲的)和最终 (逐行读取结果)的组合。

这样,所提出的问题的解决办法或多或少是:

代码语言:javascript
复制
$db = mysqli_connect($servername, $username, $password, $dbname);
mysqli_real_query($db, 'SELECT * FROM base');
$result = mysqli_use_result($db);
while ($row = mysqli_fetch_row($result)) {
    ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51550061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档