2

我一定已经在这里阅读了所有类似的帖子,但仍然无法弄清楚为什么会这样。

我的代码:

$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。

任何人都可以看到问题是什么?

4

3 回答 3

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 的默认连接器向前。

于 2012-08-14T09:19:51.450 回答
0

那你为什么要对一条记录使用while循环呢?

于 2012-08-11T14:17:26.907 回答
0

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

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

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

$stmt->bind_result(...);
// ...
于 2012-08-11T14:51:48.577 回答