THINKPHP5.3 支持PGSQL插入与更新

在将公司的数据库从MySQL切换到PGSQL时,遇到批量插入和更新表的问题,因为TP5.3的insert、update方法在处理包含关键字如'state'、'user'、'group'的SQL时会报错。错误提示为语法错误。解决方案是手动在SQL语句中将关键字用双引号包裹。为此,需要修改ThinkPHP5.3的源码,包括insert、update和insertAll方法,以确保正确处理这些关键字。

前提:公司需要将mysql更换为pgsql。更换过程中除了官网提供的配置之外,发现无法对表进行批量插入与更新。

原因:tp自带的insert,update方法转换为sql,如果带有关键字state, user, group。就无法进行相关sql操作。

Navicate执行报错如图 syntax error at or near "user":

修复方法:需要将图中sql中关键字(添加双引号)进行替换修改为 INSERT INTO test_table ("user","group",create_time) VALUES  ('a','b','2021-04-19 12:12:12')

修改thinkphp源码 thinkphp/library/think/db/Builder.php 中insert方法:改为

public function insert(array $data, $options = [], $replace = false)
    {
        // 分析并处理数据
        $data = $this->parseData($data, $options);
        if (empty($data)) {
            return 0;
        }
        $fields = array_keys($data);
        //兼容pgsql替换关键字加双引号
        foreach($fields as $k => $v){
            if($v == "user"){
                $fields[$k] = "\"user\"";
            }
            if($v == "state"){
                $fie
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值