繁体   English   中英

Zend pdo_oci和pdo_mysql生成不同的查询格式

[英]Zend pdo_oci and pdo_mysql generating different query formats

Oracle数据库适配器:“ pdo_oci ” MySQL数据库适配器:“ pdo_mysql

用于建立JOIN查询的代码:

            $db = Zend_Db_Table::getDefaultAdapter();
            $db->setFetchMode(Zend_Db::FETCH_OBJ);

            $select = $db->select()->from(array(
                   't1' => $this->_Table1
            ));
            $select = $select->join(array(
                   't2' => $this->_Table2
           ), 't1.MENU_ID = t2.SUBMENU_ID',
            array(
                    'MENU_ID',
                    'SET_REDIRECT_URL',
                    'SUBMENU_TYPE'
            ));
            $select = $select->order(array(
                    'MENU_ID',
                    't2.DISPLAY_ORDER'
            ));
            $select = $select->where('t1.IS_ACTIVE = ?', 'Y');
            $result = $db->fetchAll($select);

由Oracle适配器(pdo_oci)生成的查询:

SELECT "t1".*, "t2"."MENU_ID" AS "parent_id", "t2"."SET_REDIRECT_URL", "t2"."SUBMENU_TYPE" FROM "DRP_ADMIN_MENU_MASTER" "t1"  INNER JOIN "DRP_ADMIN_MENU_MAPPER" "t2" ON t1.MENU_ID = t2.SUBMENU_ID WHERE (t1.IS_ACTIVE = 'Y') ORDER BY "parent_id" ASC, "t2"."DISPLAY_ORDER" ASC

由Mysql适配器(pdo_mysql)生成的查询:

SELECT `t1`.*, `t2`.`MENU_ID` AS `parent_id`, `t2`.`SET_REDIRECT_URL`, `t2`.`SUBMENU_TYPE` FROM `DRP_ADMIN_MENU_MASTER` AS `t1`  INNER JOIN `DRP_ADMIN_MENU_MAPPER` AS `t2` ON t1.MENU_ID = t2.SUBMENU_ID WHERE (t1.IS_ACTIVE = 'Y') ORDER BY `parent_id` ASC, `t2`.`DISPLAY_ORDER` ASC

问题:除非使用双引号,否则Oracle DB无法在[t1.MENU_ID = t2.SUBMENU_ID]中标识t1和t2。 而且,如果我手动输入双引号,则mysql会出错。

Oracle中的错误:

常规错误:904 OCIStmtExecute:ORA-00904:“ T2”。“ SUBMENU_ID”:无效的标识符

解决了。 使用$ db-> quoteIdentifier()。 而且有效

        $db = Zend_Db_Table::getDefaultAdapter();
        $db->setFetchMode(Zend_Db::FETCH_OBJ);

        $select = $db->select()->from(array(
               't1' => $this->_Table1
        ));
        $select = $select->join(array(
               't2' => $this->_Table2
       ), $db->quoteIdentifier('t1.MENU_ID') . ' = ' . $db->quoteIdentifier('t2.SUBMENU_ID'),
        array(
                'MENU_ID',
                'SET_REDIRECT_URL',
                'SUBMENU_TYPE'
        ));
        $select = $select->order(array(
                'MENU_ID',
                't2.DISPLAY_ORDER'
        ));
        $select = $select->where($db->quoteIdentifier('t1.IS_ACTIVE') . ' = ?', 'Y');
        $result = $db->fetchAll($select);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM