1

ストアド プロシージャがあり、各結果セットの配列を作成したいと思います。

いわば配列の配列。

mysql ワークベンチを実行すると、ストアド プロシージャが正しい結果を返します。

各コレクションを正しくループすることで機能します。ただし、最後の結果の後、結果に戻り、例外がキャッチするエラーをスローします。

例外メッセージは単に SQLSTATE[HY000]: 一般エラーです。

次の結果が遠くに行くと思われる場合。

どうすればこれを回避できますか。存在しない結果を読み取ろうとすると、エラーが発生します。コレクションはそこにあるかもしれませんが、行がない可能性があるため、コードの後の時点で配列がどのオブジェクトにマップされているかを知る必要があるため、行数はそれを回避しません。つまり、$image = result[0]、$events = $result [1];

行カウントを行った場合、$result[0] がイベントに設定されなくなる可能性があります。

public static function getHomePageContent()
{
    $results = array();

    try{
        $connection = Yii::app()->db;
        $command = $connection->createCommand("CALL get_homepage_content()");


        $dataReader = $command->query();
        $dataReader->setFetchMode(PDO::FETCH_ASSOC);

        do {                   
                $results[] =  $dataReader->readAll();

        } while ($dataReader->nextResult());

        $dataReader->close();
    }

    catch(Exception $e){
        Yii::log('', CLogger::LEVEL_ERROR, $e->getMessage());
    }

    $connection->setActive(false);

    return $results;
}

ストアドプロシージャは

BEGIN

SET @slideshow_visible := 1;
SET @image_approved :=1;
SET @image_visible  :=1;
SET @image_format_type :='image';
SET @video_format_type :='video';

/* Main Slideshow Details */
SELECT title, button_url, title_text, alt_text, image_path, caption
FROM slideshow 
WHERE visible = @slideshow_visible
ORDER BY slideshow.order ASC;

/* News Section */
SELECT p1.*,wm2.meta_value
FROM warring_blogw.wp_posts p1
LEFT JOIN
      warring_blogw.wp_postmeta wm1
      ON (
              wm1.post_id = p1.id
              AND wm1.meta_value IS NOT NULL
              AND wm1.meta_key = "_thumbnail_id"
      )
LEFT JOIN
      warring_blogw.wp_postmeta wm2
      ON (
              wm1.meta_value = wm2.post_id
              AND wm2.meta_key = "_wp_attached_file"
              AND wm2.meta_value IS NOT NULL
      )         
/*LEFT JOIN 
     warring_blogw.wp_usermeta wm3
         ON(
                wm3.user_id = p1.post_author
            )*/
WHERE
      p1.post_status="publish"
      AND p1.post_type="post";

/* Photos */
SELECT im.title,im.alias_title, im.description, im.thumbnail_image_small, im.hits 
FROM image im
WHERE im.approved = @image_approved AND im.visible = @image_visible AND im.format_type = @image_format_type;


SELECT * from event;

常に最後の結果でエラーが発生します - fetchall でエラーが発生している間に while ループまたは do を使用しても、エラーが発生します

4

1 に答える 1

0

例外の代わりに結果セットを返すには、ストアド プロシージャの先頭に次を追加します。

DECLARE EXIT HANDLER FOR SQLEXCEPTION
        SELECT 'SQLEXCEPTION raised' AS errmsg;

もちろん、最初に例外がスローされているという事実を修正する必要があります。おそらく、ストアド プロシージャの内容を投稿したいと思いませんか?

于 2012-10-12T19:25:50.027 に答える