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;

它总是在最后一个结果上我得到错误 - 即使我使用 while 循环或 do while 错误发生在 fetchall

4

1 回答 1

0

要返回结果集,而不是异常,您可以在存储过程的顶部添加以下内容:

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

当然,您可能应该首先解决异常被抛出的事实。也许您想发布存储过程的内容?

于 2012-10-12T19:25:50.027 回答