ThinkPHP数据表大小写问题:连接oracle数据库出错

问题描述:

        一个老项目一直在运行,前几天手痒,维护时更新了thinkphp的ORM组件。当时运行一切正常,今天客户反馈不能自动同步主数据库了。打开调试发现问题如下:

[备注:ThinkPHP版本:v6.0.13LTS]

[2022-10-18T22:08:51+08:00][sql] select a.column_name,data_type,DECODE (nullable, 'Y', 0, 1) notnull,data_default, DECODE (A .column_name,b.column_name,1,0) pk from all_tab_columns a,(select column_name from all_constraints c, all_cons_columns col where c.constraint_name = col.constraint_name and c.constraint_type = 'X' and c.table_name = 'X_aaabbb_eee' ) b where table_name = 'X_aaabbb_eee' and a.column_name = b.column_name (+) [ RunTime:0.000735s ]
[2022-10-18T22:08:51+08:00][error] [10501]SQLSTATE[HY000]: General error: 942 OCIStmtExecute: ORA-00942: table or view does not exist
 (ext\pdo_oci\oci_statement.c:157)[X:\XXX\vendor\topthink\think-orm\src\db\PDOConnection.php:797]

        General error: 942 OCIStmtExecute: ORA-00942:这个错误一般是数据库表名错误。

 网上错误解决方案:

'params' => [
    \PDO::ATTR_CASE         => \PDO::CASE_LOWER,
],

        这个设置是控制表列名的,并不是控制数据库表名的。

网上比较麻烦的解决方案:

  • 一种是直接修改thinkphp源代码,使表名大小写转换失效。【不更新版本会一直生效】
  • 一种是在自己的模型类里设置覆盖全局变量:表名。【更新版本,变量名可能被修改】

正确的解决方案:

class X_aaabbb_eee extends Model
{
    protected $connection = 'oracle';

    protected $table = 'X_AAABBB_EEE';   //这里填写完整的数据库表名,区分大小写。
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开软古剑楠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值