1
私は次のクエリを持っています(このクエリは実験用です)。PHP/Laravelで変数付きのプリペアドステートメント - バッファされていない他のクエリがアクティブな間にクエリを実行できません
SELECT @sql:=GROUP_CONCAT(DISTINCT CONCAT('MAX(case when alias = ''', alias, ''' then data_varchar end) AS ', alias)) from documents
left join property_values ON property_values.document_id=documents.id
left join properties on properties.id = property_values.property_id;
SET @sql = CONCAT('SELECT ', @sql, ', documents.* from documents left join property_values on property_values.document_id=documents.id left join properties on properties.id = property_values.property_id GROUP BY documents.id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
PHP/Laravelでは動作しません。私は準備された声明の中に何を入れるべきか、何を実行するかについてはわかりません。多くのことを試しましたが、ほとんどの場合エラーが発生しています:
バッファされていない他のクエリがアクティブな間はクエリを実行できません。 PDOStatementに使用を検討してください:: fetchAllの()
をマイコード:
DB::select(DB::raw('SELECT @sql:=GROUP_CONCAT(DISTINCT CONCAT(\'MAX(case when alias = \'\'\', alias, \'\'\' then data_varchar end) AS \', alias)) from documents
left join property_values ON property_values.document_id=documents.id
left join properties on properties.id = property_values.property_id;'));
DB::select(DB::raw('SET @sql = CONCAT(\'SELECT \', @sql, \', documents.* from documents left join property_values on property_values.document_id=documents.id left join properties on properties.id = property_values.property_id GROUP BY documents.id\');'));
DB::raw('PREPARE stmt FROM @sql;');
$result = DB::select(DB::raw('EXECUTE stmt'));
最初の2つのクエリがうまく実行されているように見えます。しかし準備のためにそれはクラッシュします。
この場合