2017-02-10 1 views
0

Je rencontre un problème lors de l'appel d'une procédure stockée à partir d'une application Laravel 5.3. Le script de la page échoue avec les éléments journaux suivants sont générés dans le fichier journal apache:L'appel de la procédure stockée à partir de l'application Laravel 5.3 entraîne une exception PDO non interceptée

  1. PHP Erreur fatale: taille maximale autorisée pour la mémoire de 134217728 octets épuisé (a essayé d'allouer 842018128 octets)
  2. Uncaught PDOException: SQLSTATE [ HY000]: Erreur générale: 2014 Impossible d'exécuter des requêtes pendant que d'autres requêtes sans tampon sont actives

J'ai essayé de remédier en augmentant la limite de mémoire dans le fichier php.ini en vain.

Les erreurs sont générées à cette déclaration:

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

Ma procédure stockée est la suivante:

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 

J'isolé l'appel de l'instruction,

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

à une fonction par lui-même avec les mêmes résultats.

Merci pour toute aide!

Répondre

0

Mettre dans les deux lignes fixes la question ci-dessous:

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