Laravel 5.7 - 使用updateOrInsert()时,查询构建器无法正确转义引号或反斜杠

问题描述 投票:0回答:1

我有一个数组,在值中有一些字符串和特殊字符。

如果我使用插入方法,它的效果很好。

$result = DB::connection('host1')->table('tblName')->insert($data);

如果我使用更新方法,它的效果很好。

$result = DB::connection('host1')->table('tblName')->where('id',$data['id'])->update($data);

但是,如果我使用方法updateOrInsert它不起作用。它似乎是一个old issue

$result = DB::connection('host1')->table('tblName')->updateOrInsert([
            'id'=>$data['id'],
            $data
        ]);

这是我得到的错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'No Annual Fee `1` = ?)) as `exists`' at line 1 (SQL: select exists(select * from `tblName` where (`id` = 56429444 No Annual Fee `1` = 56429444)) as `exists`)

在使用SQL EXISTS时,似乎可以解决使用addslashes()转义的问题。也许这个方法的第一个查询。

但即使我遍历数组并转义每个值它仍然无法正常工作。

foreach ($data as $k=>$v){
   $dt[$k]=addslashes($v);
}

如何使用updateOrInsert解决它?

laravel-5 insert-update addslashes
1个回答
1
投票

功能签名是:

updateOrInsert(array $attributes, array $values = [])

所以你应该保持$attributes数组中检查存在的$values数组,如下所示:

$result = DB::connection('host1')->table('tblName')
          ->updateOrInsert(['id'=>$data['id']], $data);
© www.soinside.com 2019 - 2024. All rights reserved.