前提:公司需要将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

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

被折叠的 条评论
为什么被折叠?



