【问题标题】:Possible Memory Leak with prepared statements?准备好的语句可能存在内存泄漏?
【发布时间】:2015-07-19 17:31:47
【问题描述】:

背景:

我正在尝试学习准备好的语句,而这个正在抛出一个错误,我想学习如何修复。

Item 表中的数据是由用户输入的,这就是为什么我也为此使用准备好的语句,而且......当然是实践......

我花了大约一个小时搜索这个站点,大多数站点都建议将内存限制更改为更高的值。我认为这不是必需的,因为我选择的表行数很少。.

查询目的:

用户加载页面,它会列出项目。从这里,他们可以使用他们从参与我们运行的计划中获得的积分购买所述物品。这是列出物品的查询..

这是错误:

致命错误:第 80 行(已删除,但为文件位置)中允许的内存大小为 201326592 字节已用尽(尝试分配 4294967296 字节)

第 80 行:

$Select_stmt2->bind_result($Item_Key, $Item_Image, $Item_Name, $Item_Amount, $Item_Describe);

额外信息:

$conn 变量也是从第二个 configure.php 文件中提取的。我将显示它减去连接到服务器的信息。

//Connect to Database
$conn = new mysqli('localhost', 'Username', 'Password', 'Table Name');

代码:

//Item Points
            $Enabled = 'Enabled';

            $Select_Query2 = "SELECT Item_Key, Item_Image, Item_Name, Item_Amount, Item_Describe FROM Item WHERE Item_Status = ?";
            $Select_stmt2 = $conn->prepare($Select_Query2);
            $Select_stmt2->bind_param('s',$Enabled);
            $Select_stmt2->execute();

            $Select_stmt2->bind_result($Item_Key, $Item_Image, $Item_Name, $Item_Amount, $Item_Describe);
            if(!$Select_stmt2)
            {
                echo'Error: Selecting Items';
            }
            else
            {
                /* Code to display the data for line 80 on the website */
            }

【问题讨论】:

  • 您的 Item 表的描述是什么?如果您单独选择每个项目,您会得到同样的错误吗?
  • 您是否在循环中运行$conn->prepare
  • 您是否将图像存储为 BLOB?
  • @JayBlanchard 你的问题指明了方向。 Item_Describe 被设置为 longblob .. 我将其更改为 varchar 并且它按预期工作...

标签: php sql memory-management memory-leaks prepared-statement


【解决方案1】:

你有 blob 列吗?数字 4294967296 表示您正在尝试为 blob 列的最大长度分配内存。它可能是一个错误但不是泄漏,罪魁祸首可能是绑定语句。如果您有一个 blob 列并且它不断给出错误,请尝试在您的 select 语句中将其转换为 varchar。

【讨论】:

  • Item_Describe 被设置为 longblob .. 我将其更改为 varchar 并且它按预期工作。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 2012-09-23
相关资源
最近更新 更多