好的我有一个存储过程,我想构建每个结果集的数组。
阵列数组可以这么说。
当我运行mysql workbench时,我的存储过程会返回正确的结果。
它通过正确循环遍历每个集合来工作。然而,在最后一个结果之后,它返回到结果,然后抛出一个错误,exeception捕获。
异常消息只是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循环或者在fetchall上发生错误时执行
答案 0 :(得分:0)
要返回结果集而不是异常,您可以在存储过程的顶部添加以下内容:
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SELECT 'SQLEXCEPTION raised' AS errmsg;
当然,您应该首先确定异常被抛出的事实。也许你想发布存储过程的内容?