从 Laravel 5.3 应用程序调用存储过程会导致"未捕获的 PDO 异常"



从Laravel 5.3应用程序中调用存储过程时遇到问题。页面脚本失败,在apache日志文件中生成了以下日志项:

  1. PHP致命错误:允许的内存大小134217728字节已用完(试图分配842018128字节)
  2. 未捕获的PDOException:SQLSTATE[HY000]:一般错误:2014当其他未缓冲的查询处于活动状态时无法执行查询

我试图通过增加php.ini文件中的内存限制来补救,但没有成功。

错误是在以下语句中生成的:

$pages = DB::select('call sp_get_pages_for_audio_section(1133)');

我的存储过程如下:

CREATE PROCEDURE `sp_get_pages_for_audio_section`(IN topic_id INT UNSIGNED)
BEGIN
SET @id = topic_id;
SELECT p.id, p.title, p.page_order, p.include_audio, a.filename,
a.body, a.directions, a.media_type, a.id as asset_id,
a.play_blank_mp3, a.cc_file, a.cc_swf, plt.title AS plt_title,
l.id as lesson_id,
CASE p.page_layout_template
WHEN 0 THEN FALSE
ELSE TRUE
END
AS has_plt,
IF ((a.filename IS NOT NULL AND length(a.filename) > 0), 1, 0)
AS audio_asset_fulfilled,
IF ((a.filename IS NULL OR a.filename = '') AND (length(a.body) > 0 OR length(a.directions) > 0), 1, 0)
AS audio_asset_unfulfilled
FROM pages p
LEFT JOIN page_layout_templates plt
ON plt.id = p.page_layout_template
LEFT JOIN assets a
ON a.page_id = p.id
AND a.asset_type = 'audio'
INNER JOIN topics t
on t.id = p.parent_topic_id
INNER JOIN lessons l
on t.parent_lesson_id = l.id
WHERE p.parent_topic_id = @id
ORDER BY page_order ASC;
END

我隔离了声明电话,

$pages = DB::select('call sp_get_pages_for_audio_section(1133)');

函数本身具有相同的结果。

谢谢你的帮助!

放入以下两行修复了问题:

$pdo = DB::connection()->getPdo();
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

最新更新