ユニオンの小さなクエリによって構築された動的クエリがありました。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 つのクエリだけでこれを解決できますか?