准备语句可能存在内存泄漏问题?

3

背景:

我正在尝试学习预处理语句,但是这个语句出现了错误,我想学习如何修复它。

由于Item表中的数据是由用户输入的,所以我也使用了一个预处理语句来处理它,当然还有练习的需要。

我在这个网站上搜索了大约一个小时,大多数网站都建议将内存限制更改为更高的值。但我认为这并不需要,因为我选择的表只有很少的行数。

查询目的:

用户加载页面后,它将列出物品。从这里他们可以用参与我们运行的项目获取的点数购买该物品。这是列出物品的查询。

这是错误信息:

致命错误:在第80行(文件的位置已删除),可分配4294967296字节时,已耗尽201326592字节的允许内存大小

第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 */
            }

你的项目表有什么描述?如果你逐个选择每个项目,你是否会得到相同的错误? - andrewsi
你是否在循环中运行 $conn->prepare - Siguza
1
你是将图像存储为BLOB吗? - Jay Blanchard
1
@JayBlanchard,你的问题指明了方向。Item_Describe 被设置为 longblob 类型,我将其更改为 varchar 类型后,它按预期工作了... - Jason
1个回答

1

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


Item_Describe 被设置为 longblob 类型,我将其更改为 varchar 类型后,它按预期工作了。感谢您的帮助。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接