允许的内存大小为67108864字节

时间:2012-08-11 14:14:41

标签: php mysql memory mysqli

我必须在这里阅读所有类似的帖子,但仍然无法弄清楚为什么会发生这种情况。

我的代码:

$stmt = $this->db->stmt_init();
        $stmt->prepare("SELECT Table1.id,Name,type,text,fname,lname FROM Table1, Table2 WHERE Table1.email = Table2.email AND type='text' AND Table1.Id=?");
        $stmt->bind_param("i", $id);
        $stmt->bind_result($legTxtId,$legTxtName, $legTxtType, $legTxtText, $legTxtFname, $legTxtLname);
        $stmt->execute();
        $results = array();
        while($stmt->fetch())
        {
            $results[] = array(
                    'legTxtId' => $legTxtId , 'legTxtName' => $legTxtName , 'legTxtType' => $legTxtType , 
                    'legTxtText' => $legTxtText , 'legTxtFname' => $legTxtFname ,
                    'legTxtLname' => $legTxtLname );
        }
        $stmt->close();
        return $results;

现在我在一个在此之前调用的不同函数中使用完全相同的代码,即使它返回另一个字段也能正常工作。

这个特别只返回1行,只有简单的短文本(没有照片或任何东西)所以它不应该失败,因为它肯定少于64M。

任何人都可以看到问题所在吗?

3 个答案:

答案 0 :(得分:1)

正如在另一个问题中所讨论的那样,两种解决方案似乎是:

1)切换到mysqlnd连接器,因为它没有显示相同的错误。

如果您正在使用Yum来安装PHP(例如在Amazon ec2服务器上),那么您可以通过更改LAMP堆栈的设置来实现:

sudo yum install php-mysql php php-xml php-mcrypt php-mbstring php-cli mysql httpd 

为:

sudo yum install php-mysqlnd php php-xml php-mcrypt php-mbstring php-cli mysql httpd 

2)使用store_result或use_result,它们也不会显示大量的内存分配问题。

切换到mysqlnd可能是一个更好的长期解决方案,因为它通常比现有的php-mysql连接器写得更好(例如,结果在复制到PHP内存之前不会复制到MySQL内存中)并且是PHP的默认连接器5.4.0起。

答案 1 :(得分:0)

那么为什么你在一个记录中使用while循环?

答案 2 :(得分:0)

将数据移动到本地缓冲区可能会有所帮助:

// ...
$stmt->prepare(...);
$stmt->bind_param(...);

$stmt->execute();
$stmt->store_result();

$stmt->bind_result(...);
// ...