0

ユニオンの小さなクエリによって構築された動的クエリがありました。1 つの大きなリスト内のいくつかのテーブルからデータを取得する必要があるため、ユニオンを使用します。テーブルには多くの共通点がありますが、別のテーブルのデータが必要です。したがって、このソリューションが最良のソリューションのように思われると思いました。これはこれまでのところうまくいきましたが、今日、さらにクエリを追加したところ、壊れて次のエラーが発生しました。

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 150994936 bytes)

エラーはこの関数を参照しています:

function selectResults($stmt){
    $parameters = array();
    $results = array();

    $meta = $stmt->result_metadata();

    while ( $field = $meta->fetch_field() ) {   
     $parameters[] = &$row[$field->name]; 
    }

    //------THIS IS WHERE THE ERROR IS------
    call_user_func_array(array($stmt, 'bind_result'), $parameters);
    //--------------------------------------

    while ( $stmt->fetch() ) {
      $x = array();
      foreach( $row as $key => $val ) {
         $x[$key] = $val;
      }
      $results[] = $x;
    }

    return $results;

}

関数は次のように呼び出されます。

$mysqli = new mysqli('localhost', 'username', 'pass', 'db');
$stmt = $mysqli -> prepare("some query");
$stmt -> execute();
$results = selectResults($stmt);
$stmt -> close();
$mysqli -> close();

クエリは約 1500 語になる場合がありますが、これは多すぎますか?

すべてのテーブルを同じテーブルに入れ、1 つのクエリだけでこれを解決できますか?

4

2 に答える 2

3

最新のサブクエリを別のサブクエリで使用しようとしましたが、それでもエラーが発生しました。したがって、サブクエリの数ではなく、新しいサブクエリが問題であると考えました。新しいサブクエリには mediumtext フィールドがあり、他のサブクエリには varchar がありました。mediumtext を varchar に切り替えてみたところ、動作するようになりました。これをミディアムテキストとして使用する理由がないので、これで解決します。

于 2013-03-31T16:24:04.330 に答える
0

PHP 設定で memory_limit を増やしてみてください。

于 2013-03-31T16:04:57.707 に答える