簡體   English   中英

Zend_Db PDO異常出現在mySQL視圖中嗎?

[英]Zend_Db PDO exception arises with a mySQL View?

Zend 1.12.1更新到1.12.3並打開x_debug on並將OLD_PASSWORDdefault

我重新運行了一個可以無縫運行的程序,現在它具有致命的PDOException ,詳細信息如下:

錯誤:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'place_fcb.userid' in 'group statement'

實際的SQl查詢:

SELECT `C`.* 
FROM (SELECT `place_fcb`.* FROM `place_fcb`) 
AS `C` 
WHERE (place_type_id != '176') 
GROUP BY place_fcb.userid
HAVING (place_fcb.pda >= '2009-12-21') 
AND (place_fcb.pda <= '2010-01-20')

Zend_Db_table_Abstract:

 public function getPlacefcb($start_date = '', $end_date = '', $r_id = '')
    {
        $sub_sql = $this->select()->from('place_fcb');

        $select = $this->select()
            ->setIntegrityCheck(false)
            ->from(array('C' => new Zend_Db_Expr('('.$sub_sql.')')))
            ->where("place_type_id != '176'")
            ->group('place_fcb.userid');

        if($start_date != '')
            $select->having('`place_fcb`.`pda` >= ?', $start_date);

        if($end_date != '')
            $select->having('`place_fcb`.`pda` <= ?', $end_date);

        if($region_id != '')
            $select->having('`place_fcb`.`r_id` = ?', $r_id);

        return $rowset = $this->fetchAll($select);
    }

place_fcb的MySQL:

place_fcb是一個VIEW而不是一個表。 它具有以下相關領域

place_id
r_id
place_type_id
pda
userid

我可以通過將SQl語句更改為以下內容來刪除異常並返回相同的結果:

    SELECT `C`.* 
    FROM (SELECT `place_fcb`.* FROM `place_fcb`) 
    AS `C` 
    WHERE (place_type_id != '176') 
    GROUP BY userid
    HAVING (pda >= '2009-12-21') 
    AND (pda <= '2010-01-20')

即。 刪除所有表后綴...

但是我將如何用Zend修復它? 為什么突然出錯呢?

為什么您的查詢使用子查詢:

->from(array('C' => new Zend_Db_Expr('('.$sub_sql.')')))

而不是簡單地:

->from('place_fcb')

對於前者,外部查詢中沒有place_fcb表; 因此,如此合格的引用會失敗(而且總是會失敗,因此在升級之前,我看不到它以前如何為您工作)。

如果您堅持保留子查詢,則可以將子查詢的別名從'C'重命名為'place_fcb' ,盡管從長遠來看這可能會造成混亂; 最好將合格的引用從'place_fcb'重命名為'C'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM