热门标签 | 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连接mysql显示数据,php连接mysql数据库的算法思想
    本文目录一览:1、怎么用php显示mysql数据表数据 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • 本文介绍了如何对PHP二维数组进行排序以及如何获取最大值。同时还提到了在数据分析系统中使用排序的实例,以及如何统计角色等级和创建角色总数。 ... [详细]
  • MySQL笔记_MySQL笔记1|数据库17问17答
    本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ... [详细]
  • PHP操作MySql数据库_PHP教程:链接数据库$conn@mysql_connect(localhost,root,88888888)ordie(链接错误);解决中文乱码mys ... [详细]
  • centos 编译安装 php 5.5,CentOS 5.5上编译安装 PHP 5.3.6
    编译并安装#make&&makeinstall安装结果摘要,里面有几个主要的安装路径变量libtool:install:warning:remembertorunli ... [详细]
  • c怎么将得到的数据存入到数组里
    数据库|mysql教程cmysqlc++数组数据库-mysql教程cmysqlc++数组c管理系统框架源码下载,鼠标ubuntu不显示,爬虫读取照片信息,sqllitephp,淘宝 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • PHP小习题:PHP小练习题前几天在百度知道里面看到有位网友询问如何制作一下的小程序:用php语言设计一个小程序,计算今天到达下月的天数、全部输出这些天数,并使得每天的日期以三种颜 ... [详细]
  • 可空类型可空类型主要用于参数类型声明和函数返回值声明。主要的两种形式如下: ... [详细]
  • python3连接外部Mysql
    前提条件,已经安装过MySQL(比如说以前web开发安装过MySQL)1.安装PyMySQLpipinstallPyMySQL2.测试1i ... [详细]
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社区 版权所有