Laravel 5.7 - 使用 updateOrInsert() 时,查询构建器无法正确转义引号或反斜杠
Laravel 5.7 - Query builder not escaping quotes or backslashes correctly when using updateOrInsert()
我有一个数组,其中包含一些字符串和值中的特殊字符。
如果我使用插入方法,效果很好。
$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);
}
任何ide如何使用updateOrInsert
解决它?
函数签名是:
updateOrInsert(array $attributes, array $values = [])
因此,您应该将检查是否存在的 $attributes
数组与 $values
数组分开,例如:
$result = DB::connection('host1')->table('tblName')
->updateOrInsert(['id'=>$data['id']], $data);
我有一个数组,其中包含一些字符串和值中的特殊字符。
如果我使用插入方法,效果很好。
$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);
}
任何ide如何使用updateOrInsert
解决它?
函数签名是:
updateOrInsert(array $attributes, array $values = [])
因此,您应该将检查是否存在的 $attributes
数组与 $values
数组分开,例如:
$result = DB::connection('host1')->table('tblName')
->updateOrInsert(['id'=>$data['id']], $data);