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

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

我使用这个作为我的查询:

$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:select * from article where form_master_id = 101)

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

php mysql laravel
3个回答
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
投票

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

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

因此,为了使您的代码有效,请在WHERE之后保留您的参数:

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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.