单个 PDO 查询意外达到 PHP 内存限制?

2024-01-27

我有一个非常简单的查询,如下所示:

$result = $pdo->query('SELECT * FROM my_table');

foreach($result as $r) {
    // do some stuff
}

但是当我运行这个时,我收到以下错误:

致命错误:第 15 行 /path/to/myfile.php 中允许的内存大小 134217728 字节已耗尽(尝试分配 32 字节)

“15号线”是$pdo->query line.

如果我把die()查询后,我仍然收到相同的错误。

我认为这一次只能获取一行;为什么它使用这么多内存?


调用查询之前,内存使用量为 635384 字节。我猜测查询会为每条记录分块分配。

叮叮叮!

当连接MySQL时,PHP喜欢使用缓冲查询 http://php.net/mysqlinfo.concepts.buffering。无论您使用什么方法进行连接,都是如此。使用缓冲查询时,会立即获取整个结果集,而不是在您询问时才获取。这是usually有利于性能,因为往返次数较少。

但就像 PHP 中的一切一样,也有一个陷阱。正如缓冲页面上所述:

当使用 libmysql 作为库时,PHP 的内存限制不会计算用于结果集的内存,除非数据被提取到 PHP 变量中。对于 mysqlnd,占用的内存将包括完整的结果集。

您正在使用 PHP 5.3,这意味着您很有可能正在使用 mysqlnd。

您需要在此处关闭缓冲查询。每个 PHP 到 MySQL 的接口都有不同的做法:

  • 对于 PDO,您需要设置PDO::MYSQL_ATTR_USE_BUFFERED_QUERY归因于false.
  • 对于 mysqli,您需要传递MYSQLI_USE_RESULT常数为query http://php.net/mysqli.query method.
  • 对于mysql,你需要调用mysql_unbuffered_query代替mysql_query.

完整的详细信息和示例位于页面上。

巨大的无缓冲查询陷阱!

You must在发出另一个查询之前正确关闭语句句柄并释放结果集:

  • 在 PDO 中,这意味着调用closeCursor http://php.net/pdostatement.closecursor在语句句柄上。
  • 在 mysqli 中,这意味着调用free_result http://php.net/mysqli-stmt.free-result在语句句柄上或free http://php.net/mysqli-result.free在结果句柄上,具体取决于您正在处理的内容。
  • 在mysql中,这意味着调用mysql_free_result http://php.net/function.mysql-free-result

如果不这样做将会导致错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单个 PDO 查询意外达到 PHP 内存限制? 的相关文章

  • 简单的 PHP 回显代码不起作用

    这是我的 html 和 php 脚本 h1 Bob s Auto Parts h1 table width 100 tr tr table 为什么这个输出会出现一个 gt 我希望它是 这有效 仅有的 这是输出 鲍勃的汽车零件 鲍勃
  • 如何检测字符串中的非 ASCII 字符?

    如果我有一个 PHP 字符串 如何以有效的方式确定它是否至少包含一个非 ASCII 字符 我所说的非 ASCII 字符是指不属于该表的任何字符 http www asciitable com http www asciitable com
  • MySQL NOT IN 来自同一个表中的另一列

    我想运行 mysql 查询来选择表中的所有行films其中的值title该列不存在于另一列的所有值中的任何位置 collection 这是我的表格的简化版本 其中包含内容 mysql gt select from films id titl
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 如何隐藏 URL 中的锚标记

    如何隐藏地址栏中以下链接 href 的哈希值 a href index php dev name 所以它会将我重定向到index php dev name 但我希望地址栏只显示index php 您可以使用 Javascript oncli
  • 使用 PHP Selenium Webdriver 单击下拉菜单中的选项?

    我正在使用 PHP Selenium Webdriver 包装器Facebook https github com facebook php webdriver 任何人都可以给我一个如何单击或从选择下拉菜单中选择选项的示例吗 我已经尝试过这
  • 未传递“client_reference_id”参数

    我使用 Stripe Checkout Stripe 版本 2016 07 06 我想通过参数 client reference id 恢复个性化数据 但在 JSON 中 当我有金额或电子邮件时 我找不到它 我是在测试环境中 你能帮我吗 先
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • 检查 PHP 中的字符串长度

    我有一个长度为 141 个字符的字符串 使用下面的代码我有一个if如果字符串大于或小于 140 则语句返回一条消息 libxml use internal errors TRUE dom new DOMDocument dom gt loa
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • Ebay api GetSellerList,解析响应 XML

    我正在使用 eBay 交易 api 来获取当前列出的卖家股票 我正在使用 GetSellerList 调用 我在解析 xml 时遇到问题 然后将其插入到网站商店中 这是 xml 请求
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • 奇怪的 MySQL Python mod_wsgi 无法连接到 'localhost' (49) 上的 MySQL 服务器问题

    StackOverflow上也有类似的问题 但我还没有发现完全相同的情况 这是在使用 MySQL 的 OS X Leopard 机器上 一些起始信息 MySQL Server version 5 1 30 Apache 2 2 13 Uni
  • 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用两个而不仅仅是一个

    在我的代码中我有两个数据库ABC and XYZ 我想在同一模型中使用两个数据库 而不是 phalcon 中的解决方案是什么 如何为此实现多个数据库连接 one
  • 从所有会话中注销

    我有一个注销选项 这是我的代码 session start session destroy setcookie key time 60 60 24 setcookie username time 60 60 24 我想添加另一个选项来注销所
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行

随机推荐

  • Visual Studio 和 TFS,检测 Visual Studio 外部的更改[重复]

    这个问题在这里已经有答案了 我正在使用带有 ASP NET Web 应用程序的 Visual Studio 2015 并安装了 Umbraco 和 uSync uSync 和 Umbraco 是什么并不重要 但是当我启动项目并在 Umbra
  • Kerberos - SPN 和密钥表

    我有一个项目 其中嵌入了启用了 SPNEGO 的 jetty 我希望能够在本地运行该项目以用于开发目的 启用 SPNEGO 我的问题是 SPN 和 keytab 是否与特定服务器相关联 或者我可以在服务的多个实例上使用同一组吗 Kerber
  • IHTTPModule 在 ASP.NET 中在 HTTP 和 HTTPS 之间切换

    我正在开发一个网站 其中包含需要通过 SSL 保护的部分 我已配置网站 以便在始终处于 SSL 模式时运行正常 我在 IE7 IE8 FireFox Safari Chrome 中看到 SSL 挂锁 为了实现 SSL 切换 我创建了一个实现
  • facebook redirect_uri 设置为 ios URL 方案

    我开始研究如何以编程方式使用 Facebook 我已经在我的应用程序中设置了 URL 方案 以便我可以使用 myappopenup 从浏览器打开它 然后我在 Facebook 上创建了一个应用程序 复制一个 AppId 并尝试如下所示 le
  • SVG中foreignObject的特征检测

    我在 SVG 中使用foreignObject 元素 但是 IE9 不支持该元素 我正在寻找一种检测此功能的方法 Modernizr 没有检测到此功能 似乎我无法像使用矩形 createSVGRect 一样使用 createSVGForei
  • 如何从 Perl 程序打开 Excel(程序,而不是文件)?

    我目前在 Windows 中有一个 perl 程序 它通过 Spreadsheet WriteExcel 创建并填充一个 excel 文件 但我希望在程序关闭时打开该文件 我尝试用谷歌搜索信息 但我发现的只是如何在 perl 中打开和读取
  • mysql 复杂的sql

    我今天早些时候提出了一个问题 并得到了很好的答复 效果很好 这个问题的第二部分从未得到答复 所以我再试一次 SELECT q id q question a question id a answer a correct FROM SELEC
  • 将列从 VARCHAR(MAX) 更改为 VARBINARY(MAX)

    我有一张桌子 上面有一个VARCHAR MAX 列 我需要将其更改为VARBINARY MAX 我尝试使用命令 ALTER TABLE TableName ALTER COLUMN ColumnName VARBINARY MAX 但我得到
  • 具有语法着色功能的 HTML 编辑器 jQuery 插件

    我正在寻找一个 jQuery 插件 它将显示用于 HTML 创作和编辑的文本区域 我正在寻找的东西 必须支持编写 HTML 而不是所见即所得的表示形式 必须像任何富客户端 IDE 一样在您键入时为 HTML 着色 应该是 jQuery 但原
  • Git 格式补丁查看器?

    有人正在向我发送由 git format patch 生成的补丁 是否有一个 GUI 在 Linux 上 可以打开这些 patch 文件 我已经尝试了很多 diff gui 但它们所做的只是比较两个现有的文件 文件夹 没有人可以显示补丁 除
  • 在 Python 子进程中使用 Windows 路径(指向可执行文件)

    我开始在安装了 cygwin Python 2 7 的 Windows 7 x64 计算机上开发一个小型 pdf 到 jpg 脚本 以下效果完美 import subprocess filename test subprocess chec
  • 如何在不锁定 GUI 的情况下将数千个项目添加到绑定集合中

    我有一个设置 其中可能有数千个项目 认为 3000 5000 个 将添加到ObservableCollection绑定到一些可视化界面 目前 添加它们的过程非常慢 大约 4 秒 1000 个项目 当然 GUI 在此期间没有响应 有什么好方法
  • 等待 5-10 秒,然后运行 ​​Outlook 代码

    我的 Outlook 规则中有 VBA 代码 我希望当我收到具有特定主题的电子邮件时 Outlook 开始运行脚本 但是 当收到电子邮件时 Outlook 立即开始运行代码以获取上一封电子邮件 这可能是因为电子邮件刚刚收到且尚未移动到特定文
  • Android:将额外内容从一个活动传递到另一活动

    我有一个填充到活动 Main java 的 JSON 文件 此活动显示了来自我的 JSON 条目上的 URL 的 3 个随机图像 我想要做的是 我的 JSON 上有 13 个不同的条目 每当我单击显示的随机图片时 它都会转到另一个活动 Pr
  • keyup 绑定在 Firefox 中不起作用

    你可以在这里看到我的项目 http www inluxphoto com custom jsgallery index php http www inluxphoto com custom jsgallery index php 我试图让左
  • 正则表达式模式“pL”有什么作用? [复制]

    这个问题在这里已经有答案了 有一个常见的正则表达式用于 slugify url pL d u但什么是 pL在第一个preg replace mean 这里有些例子 如何在 slugify 函数中将 替换为 https stackoverfl
  • 通过 Spring Config 将“硬编码”构造函数 Arg Class 传递给 bean

    我有一个正在注入到服务中的通用类型 由于 Java 中泛型的实现方式 我需要一个构造函数 arg 或属性设置器 来保存泛型类型参数的类信息 我的问题是 我可以通过属性注入或指定构造函数参数 用 spring 传入 Class 的实例吗 我确
  • 以编程方式更新 Excel 文档

    首先 我是一家软件开发公司自动化团队的实习学生 因此我帮助在日常构建中开发自动化测试程序 我的直线经理制作了一份 Excel 文档 将用于展示我们测试环境的结果 我们的测试在 hyper V 服务器上的虚拟 PC 上运行 我希望能够使用每个
  • MongoDB批量运算符,如果不存在则插入

    我正在使用 MongoDB 批量操作来插入文档 我想做的是插入 仅当未找到文档时 如果找到文档我不想更新 即 upsert 有什么想法如何做到这一点 然而 即使在这种情况下 var obj item test bulk find item
  • 单个 PDO 查询意外达到 PHP 内存限制?

    我有一个非常简单的查询 如下所示 result pdo gt query SELECT FROM my table foreach result as r do some stuff 但是当我运行这个时 我收到以下错误 致命错误 第 15