You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CakePHP 4接入Oracle数据库遇ORA-00911错误,求解决方案

CakePHP 4 迁移至 Oracle 数据库时 find()/get() 方法抛出 ORA-00911 错误

我正在将CakePHP 4项目的数据库从MySQL切换到Oracle,使用CakeDC的Oracle驱动,已按要求安装instantclient 19.6、适配PHP7.4.33的oci8-2.2.0和pdo_oci扩展。

目前只有手动构建的查询能正常运行:

$sql = $this->oracleConnection
            ->newQuery()
            ->select('USERS.LOCKED, USERS.LOCK_TYPE')
            ->from('USERS')
            ->where('USERS.USERNAME = \'' . $username . '\' AND ROWNUM = 1')
            ->order([]);

但调用CakePHP自带的find()、get()等方法时,会抛出ORA-00911: invalid character错误。报错的find代码如下:

$blockedUser = $this->blockedUser->find('all', [
            'conditions' => [
                'BlockedUsers.blocked_until >' => FrozenTime::now(),
                'BlockedUsers.username' => $username,
            ],
        ])->first();

生成的报错SQL语句:

SELECT *
FROM (
  SELECT cake_paging.*, (ROWNUM) AS _cake_page_rownum_
  FROM (
    SELECT BlockedUsers.ID AS BlockedUsers__ID,
           BlockedUsers.USERNAME AS BlockedUsers__USERNAME,
           BlockedUsers.OS AS BlockedUsers__OS,
           BlockedUsers.USER_AGENT AS BlockedUsers__USER_AGENT, 
           BlockedUsers.CREATED AS BlockedUsers__CREATED,
           BlockedUsers.BLOCKED_UNTIL AS BlockedUsers__BLOCKED_UNTIL
    FROM   blocked_users BlockedUsers
    WHERE (BlockedUsers.blocked_until > :c0 AND BlockedUsers.username = :c1)
  ) cake_paging
) cake_paging_out
WHERE cake_paging_out."_cake_page_rownum_" <= 1

BLOCKED_USERS表结构字段包括ID、USERNAME、OS、USER_AGENT、CREATED、BLOCKED_UNTIL(均为大写命名)。

我的app.php数据库配置:

'default' => [
            'className' => 'CakeDC\OracleDriver\Database\OracleConnection',
            'driver' => 'CakeDC\OracleDriver\Database\Driver\OracleOCI',
            'persistent' => false,
            'host' => 'myhost',
            'port' => 'myport',
            'username' => 'myusername',
            'password' => 'mypassword',
            'database' => 'myDB',
            'sid' => 'mySID',
            'encoding' => 'WE8ISO8859P1',
            'timezone' => '+1:00',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,
            'quoteIdentifiers' => false,
            'server_version' => 10,
            'url' => env('DATABASE_URL', null),
        ],

已经尝试过调整app.php中的多种连接配置,卸载重装PHP及相关扩展,现在不确定是操作有误还是该场景无法实现?


内容的提问来源于stack exchange,提问作者Henrique João

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:43:16