PHP / Laravel中包含变量的预处理语句 - 在其他未缓冲的查询处于活动状态时无法执行查询

时间:2016-09-26 10:03:56

标签: php mysql laravel laravel-5.3

我有以下查询(该查询仅供实验使用)。

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'));

前两个查询似乎执行得很好。但在准备它崩溃。

enter image description here

1 个答案:

答案 0 :(得分:0)

在这种情况下, 不是最好但更好的选择是从需要分组属性的查询创建数据库视图

或者更好地使用DB :: query(“单个字符串中的完整查询到此处”);