【问题标题】:How to insert into table using laravel raw query as well as parameters?如何使用 laravel 原始查询和参数插入表?
【发布时间】:2018-07-28 05:53:24
【问题描述】:
DB::table('my_table')->insertGetId([
    ...
    'code' => $data['code'],
    'geopoint' => \DB::raw('POINT(?, ?)', [$data['lat'], $data['lng']]),
    ...
]);

返回

Invalid parameter number (SQL: insert into `residence` (`code`, values (POINT(, ), , ?, ?)

我该如何解决这个问题?

谢谢

【问题讨论】:

  • 试试'geopoint' => \DB::raw('POINT(:lat, :lng)', [ 'lat' => $data['lat'], 'lng' => $data['lng'] ]),
  • @rkj 现在它返回 Invalid parameter number: mixed named and positional parameters (SQL: insert into my_table` (code, geopoint) 值 (123456, POINT(:lat, :lng), , , ,))`

标签: mysql laravel


【解决方案1】:

试试这个方法

为要插入的值创建数组,应用键与表中的字段名称相同

$point = DB::select("SELECT POINT($data['lat'], $data['lng']) as point FROM `any_table_name_avilable_in_your_db` LIMIT 1"); 

$data=array(
    "lat_field_name_table"=>$data['lat'],
    "lng_field_name_table"=>$data['lng'],
    "location"=>$point[0]->point
);

$checkinsert=DB::table('mytablename')->insert($data);

检查你的数据是这样插入的

if($checkinsert>0){
    //data inserted 
   //do whatever you want if inserted
}else{
   //data not inserted 
   //do whatever you want if not inserted
}

或者像这样:

$point = DB::select("SELECT POINT($data['lat'], $data['lng']) as point FROM any_table_name_avilable_in_your_db LIMIT 1"); 

DB::table('my_table')->insertGetId([ 
... 
'code' => $data['code'], 
'geopoint' =>$point[0]->point , 
... 
]);

【讨论】:

  • SQLInjection 怎么样?
  • 不,我的意思是如何在此查询中阻止它。它不会将$data['lat'] 绑定到lat_field_name_table,是吗?
  • 如果它的单个数组包含键作为字段名和值,那么如果您传递两个不同的数组,一个用于字段,另一个用于值,它将不会绑定。看这里:stackoverflow.com/questions/24805429/…
  • mysql 需要 POINT 功能时如何设置点?设置为其相关列的不是单个值。它应该绑定到该查询并计算然后将其放入该列中。
猜你喜欢
  • 2018-10-23
  • 2018-08-11
  • 2020-08-12
  • 2016-10-03
  • 2015-05-26
  • 1970-01-01
  • 2016-01-08
  • 2019-11-05
相关资源
最近更新 更多