热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

当LIMIT太高时,PHP的PDO查询没有执行?-PHP'sPDOquerynotexecutingwhenLIMITistoohigh?

IhavetheweirdestPHPPDOproblem,andIhopeyouguyscansortitoutforme.我有最奇怪的PHPPDO问题,我希望

I have the weirdest PHP PDO problem, and I hope you guys can sort it out for me.

我有最奇怪的PHP PDO问题,我希望你们能为我解决这个问题。

If I set $checkLimit to 50000, the query works fine. However, if I set it to anything above 50k, it doesn't return any results - and it doesn't cast any error messages either (I've already turned them on using $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING).

如果我将$ checkLimit设置为50000,则查询工作正常。但是,如果我将它设置为高于50k的任何值,它不会返回任何结果 - 它也不会抛出任何错误消息(我已经使用$ db-> setAttribute打开它们(PDO :: ATTR_ERRMODE,PDO) :: ERRMODE_WARNING)。

$sql = "
   SELECT d_domain_name AS domainName, d_domain_id AS domainID
   FROM domains
   ORDER BY d_domain_name_length ASC, d_domain_name ASC
   LIMIT :checkLimit
";
$stmt = $db->prepare($sql);
$stmt->bindValue(':checkLimit', intval($checkLimit), PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll();
foreach ($results as $result) {
 // 50k moments of magic
}

If I run the query outside of PHP, it works with any limit (even 500k, takes about 3 minutes).

如果我在PHP之外运行查询,它可以使用任何限制(甚至500k,大约需要3分钟)。

I've tried changing $results = $stmt->fetchAll() to while ($result = $stmt->fetch()) {} in order to try and save memory, but that didn't do anything, unfortunately.

我尝试将$ results = $ stmt-> fetchAll()更改为while($ result = $ stmt-> fetch()){}以尝试保存内存,但不幸的是,这没有做任何事情。

Can anyone tell me what I'm doing wrong here? What am I missing? Why can't I go over 50k?

谁能告诉我这里我做错了什么?我错过了什么?为什么我不能超过50k?

1 个解决方案

#1


4  

Reference: http://php.net/manual/en/mysqlinfo.concepts.buffering.php

参考:http://php.net/manual/en/mysqlinfo.concepts.buffering.php

PDO uses "buffered query" by default.

PDO默认使用“缓冲查询”。

This means that query results are immediately transferred from the MySQL Server to PHP in is then kept in the memory of the PHP process. .... The downside of the buffered mode is that larger result sets might require quite a lot memory. ....

这意味着查询结果会立即从MySQL服务器传输到PHP,然后保存在PHP进程的内存中。 ....缓冲模式的缺点是较大的结果集可能需要相当多的内存。 ....

Following these characteristics buffered queries should be used in cases where you expect only a limited result set or need to know the amount of returned rows before reading all rows. Unbuffered mode should be used when you expect larger results.

遵循这些特性,在您希望只有有限的结果集或需要在读取所有行之前知道返回行的数量的情况下,应使用缓冲查询。当您期望更大的结果时,应使用无缓冲模式。

50k is a large result set. Could you try to let pdo use unbuffered mode and fetch one row at a time? This is the example copied from the reference. The 2nd line sets the unbuffered mode.

50k是一个很大的结果集。您是否可以尝试让pdo使用无缓冲模式并一次获取一行?这是从引用中复制的示例。第二行设置无缓冲模式。

setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$uresult = $pdo->query("SELECT Name FROM City");
if ($uresult) {
   while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
       echo $row['Name'] . PHP_EOL;
   }
}
?>

推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 在使用SQL Server进行动态SQL查询时,如果遇到LIKE语句无法正确返回预期结果的情况,通常是因为参数传递方式不当。本文将详细探讨这一问题,并提供解决方案及相关的技术背景。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
author-avatar
plumscape_191
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有