可能的内存泄漏与准备好的声明?

时间:2015-05-08 17:53:48

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

背景:

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

Item表中的数据是由用户输入的,这也是我为这个使用准备好的声明的原因,以及当然的实践......

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

查询目的:

用户加载页面,它将列出项目。从这里他们可以通过参与我们运行的程序获得他们获得的积分。这是列出项目的查询..

这是错误:

  

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

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

1 个答案:

答案 0 :(得分:1)

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