我必须在这里阅读所有类似的帖子,但仍然无法弄清楚为什么会发生这种情况。
我的代码:
$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。
任何人都可以看到问题所在吗?
答案 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(...);
// ...