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 つのフィールドを返しても正常に動作します。

特にこれは、単純な短いテキスト (写真などは何もない) だけを含む 1 行のみを返すため、64M 未満であることは間違いありません。

誰が問題が何であるかを見ることができますか?

4

3 に答える 3

1

他の質問で説明したように、2 つの解決策は次のようです。

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

では、なぜ 1 つのレコードに対して 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 に答える