gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:33:38 26 4
gpt4 key购买 nike

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 Adapter (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 中的错误:

General error: 904 OCIStmtExecute: ORA-00904: "T2"."SUBMENU_ID": invalid identifier

最佳答案

解决了。使用 $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);

关于php - Zend pdo_oci 和 pdo_mysql 生成不同的查询格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55022756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com