使用 mysqli_query 的长文本最大内存错误

2024-01-17

我工作的公司使用Kayako https://www.kayako.com/管理其支持票证。我准备制作一个外部网络应用程序,它可以获取一家公司的所有门票并显示历史记录。

我使用 mysqli_query 连接到数据库。

$link = mysqli_connect($serverName, $userName, $password, $dbName);
$sql = "SELECT ticketid, fullname, creator, contents FROM swticketposts";
$result = mysqli_query($link, $sql) or die(mysqli::$error);

问题是 mySQL 中的“内容”表使用数据类型 LONGTEXT。 尝试使用 php 读取此数据会出现超时或最大内存使用错误。

第 49 行是 $result = mysqli_query 等行。

编辑:在原始帖子中发布了错误的错误消息致命错误:允许的内存大小 134217728 字节已耗尽(尝试分配 8192 字节)

尝试解决我添加的内存问题:

ini_set('memory_limit', '-1');

这给了我这个超时错误:

致命错误:第 49 行 C:\xampp\htdocs\test\php\TicketCall.php 中超出了最大执行时间 30 秒

问题是,当我们在 kayako 平台上查看门票时,它会读取相同的内容表并立即执行,因此必须有一种方法可以更快地读取这些长文本。怎么超出我的范围了。

我无法使用的解决方案:

  • 将数据类型更改为更小的值(会破坏我们的 kayako 系统)

太长了;有没有一种方法可以使用 php 和 mysql 读取长文本数据类型,而不会占用内存并出现超时错误。


首先,您可以考虑将查询更改为如下所示:

 SELECT ticketid, fullname, creator, contents FROM swticketposts WHERE customer = 'something'

通过过滤掉您的报告不关心的客户信息,您的查询将返回更少的数据。它可以节省查询的执行时间。

其次,您可能希望使用

 SUBSTRING(contents, 1, 1000) AS contents

代替contents在你的查询中。这将使您返还部分contents列(前千个字符);对于您想要做的事情来说,它可能(或可能不够)足够好。

Third, mysqli_一般使用缓冲查询。这意味着当您运行查询时,整个结果集都会被放入程序的内存中。这可能就是你记忆力衰退的原因。读这个。http://php.net/manual/en/mysqlinfo.concepts.buffering.php http://php.net/manual/en/mysqlinfo.concepts.buffering.php

您可以安排逐行处理查询,执行以下操作:

 $unbufResult = mysqli_query($link, $sql, MYSQLI_USE_RESULT) or trigger_error($link->error);
 if ($unbufResult ) {
   while ($row = $unbufResult ->fetch_assoc()) {
     /* deal with the data from one row */
   }
 }
 $unbufResult->close();

你需要小心使用close()当您完成这些无缓冲的结果集时,因为它们会使用您的 MySQL 服务器上的资源,直到您完成为止。这可能会防止你的内存井喷。 (使用时没有什么特别的fetch_assoc()这里;您可以使用任何您想要的方法获取每一行。)

第四,php的内存和时间限制通常针对交互式网站操作进行调整。有时报告生成需要很长时间。放打电话给set_time_limit() http://php.net/manual/en/function.set-time-limit.php在你的循环中和周围,类似这样。

 set_time_limit (300); /* five minutes */
 $unbufResult = mysqli_query($link, $sql, MYSQLI_USE_RESULT) or trigger_error($link->error);
 if ($unbufResult ) {
   while ($row = $unbufResult ->fetch_assoc()) {
     set_time_limit (30);  /* reset time limit on each row */
     /* deal with the data from one row */
   }
 }
 $unbufResult->close();
 set_time_limit (300); /* set time limit back to five minutes when done reading */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 mysqli_query 的长文本最大内存错误 的相关文章

  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • PHP、jQuery 和 Ajax 调用乱序

    我正在使用 jQuery 进行 Ajax 调用 我有 x 数量的 Ajax 调用附加到 div 这些 Ajax 加载请求是由 PHP foreach 循环生成的 问题是它们渲染的顺序不正确 它们被设置在数组中
  • 在 Laravel 中动态设置数据库连接和语言

    我有 3 个域指向同一个Laravel应用 我想要的是每个人都连接到自己的数据库并根据 TLD 加载自己的语言文件 我可以在哪个文件中设置这些设置 我可以直接在配置文件中执行此操作 或者可以在加载配置之前执行某些事件 我拥有的是一个简短的函
  • 创建 Facebook 测试用户时访问令牌出现问题

    我正在尝试为我的 Facebook 应用程序创建测试用户 他们在 11 月份的博客文章 http developers facebook com blog post 429 中宣布了此功能 并在此处记录了该功能 http developer
  • 删除 woocommerce 店面主页标题 php

    我正在使用 woocommerce 的店面主题 我需要用 php 删除主页标题 h1 我知道 css 解决方案 但我不想使用它 因为我想将 h1 添加到该页面的其他位置 并且在一个页面中包含 2 个 h1 对 seo 不利页 我也知道删除页
  • 如何导出带有数据的 MySQL 架构?

    我有一个完整的架构 其中有许多表 其中包含 MySQL 查询浏览器中的数据 现在我想将这个包含所有表 数据的完整数据库发送给我的同事 我怎样才能将其发送给我的同事 以便他可以将这个完整的架构放入他的 MySQL 查询浏览器中 Thanks
  • 如何在 Twitter Card 中传递动态图像路径?

    我在用
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • 如何让Gmail像加载进度条一样

    我想在页面的中心和顶部创建一个像 Gmail 一样的加载进度条 并适用于所有浏览器 这是基本代码
  • 从 Grib 天气模型中提取数据

    我已经下载了grib1模型数据来自GFS http en wikipedia org wiki Global Forecast System 我使用的是 Mac OS X 并且能够构建wgrib2文件来自NOAA http en wikip
  • magento成功页面变量

    我正在尝试捕获一些 magento 成功页面变量以传递给我们的广告公司 到目前为止 我已经得到了这个 但变量没有输出任何内容 数据需要采用以下格式 price1 price2 price3 qty1 qty2 qty3 sku1 sku2
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 更改API数据输出的布局

    我是 API 集成和 PHP 的新手 我最近将 VIN 解码器集成到我的应用程序中 在输入框中输入车辆的 VIN 选择提交 然后就会显示 API 数据库中有关该车辆的所有信息 数据存储为关联数组 其中包含类别及其相应元素 例如 对于 VIN
  • 日期时间与时间戳字段

    我是 MySQL 数据库的新手 您是否建议在表创建中使用日期时间或时间戳字段以及原因 我正在使用 MySQL 5 7 和 innodb 引擎 Thanks 我会用TIMESTAMP对于任何需要自动管理的事情 因为它支持诸如ON UPDATE
  • 如何确保在 PHP 的“foreach”循环中重置该值?

    我正在写一个简单的 PHP 页面和一些foreach使用了循环 以下是脚本 arrs array a b c foreach arrs as arr if substr arr 0 1 b echo This is b End of fir
  • PHP 中的多个插入查询[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 php html 表单 它将结果插入到狗展数据库中 问题是 无论我做什么 我都会收到此错误 查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 INSE
  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • 谷歌日历手表过期时间超过1个月怎么办?

    我将我的 CRM 系统与 Google 日历同步 为此 我要求push notifications从我的用户 Google 日历到我的系统 我已经成功创建了手表 并将过期时间设置为2030年 但是当我收到手表事件的响应时 它显示手表的过期时
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不

随机推荐