无法在Eloquent / Query Builder中使用多个占位符

时间:2017-12-30 19:41:14

标签: php mysql laravel

我使用此作为我的查询:

$fields = DB::select('select * from ? where form_master_id=?',
[$field->table_name,$field->form_master_id]);

这给了我错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在'附近使用正确的语法? form_master_id =?'在第1行(SQL:   从form_master_id = 101)

的文章中选择*

但是当我查看查询:select * from articles where form_master_id=101时,它在phpmyadmin中对我来说非常适合。

3 个答案:

答案 0 :(得分:2)

您询问的是Eloquent或Query Builder解决方案,但只讨论原始查询。

Query Builder解决方案非常简单:

DB::table($someTable)->where('form_master_id', $formMasterId)->get();

雄辩的解决方案:

$model = 'App\\' . $someModel;
$model::where('form_master_id', $formMasterId)->get();

答案 1 :(得分:1)

发生错误,因为您无法对表名进行参数化。表的名称必须是静态的,这就是您的第二个查询有效的原因。

一般来说,如果您最终需要参数化表的名称(这意味着您从某些输入中获取),那么应用程序背后的逻辑很可能是错误的。

因此,要使代码正常工作,请在WHERE之后保留参数:

$fields = DB::select(
   'select * from {$field -> table_name} where form_master_id=?',
   [$field -> form_master_id]
);

答案 2 :(得分:0)

我使用原始查询动态使用我的表名:

$fields = DB::select(DB::raw("select * from $field->table_name where form_master_id=$field->form_master_id"));