Laravel 5.5和DB :: raw无法执行查询

时间:2019-07-15 07:32:26

标签: laravel eloquent

我需要使用DB::raw执行查询,但似乎根本无法正常工作。
由于某些原因,Laravel不执行绑定,并且查询失败。我已经尝试了很多查询,事件,甚至是一个简单的查询也不起作用。

use Illuminate\Support\Facades\DB;

$query = 'select id from :my_table';

$results = DB::select(
    DB::raw($query),
    [
        'my_table' => 'advertisement__rentadvertisements',
    ]
);

dd($results);

错误

  

SQLSTATE [42000]:语法错误或访问冲突:1064   您的SQL语法有误;检查手册   对应于您的MySQL服务器版本以使用正确的语法   靠近“?”在第1行(SQL:从:my_table中选择ID)

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

this postthis post中所述,您不能只替换表名或列。

除非您简化了示例,并且进行的事情比您提到的要多,我建议仅使用查询生成器:

DB::table('advertisement__rentadvertisements')->get('id')

答案 1 :(得分:0)

您遇到语法错误,请尝试删除:中的$query,这样就可以了,而且您的语句需要类似select * from table_name where id = ?的条件

答案 2 :(得分:0)

您的绑定语法似乎是问题所在。您的数组中缺少分号:

$query = "select id from :my_table";

$results = DB::select(
    DB::raw($query),
    [
        ':my_table' => 'advertisement__rentadvertisements',
    ]
);

错误:

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 '?' at line 1 (SQL: select id from :my_table)"

表示查询中的:my_table没有被advertisement__rentadvertisements取代。

答案 3 :(得分:0)

您不能只替换表名或列。

查看更多:https://laravel.com/docs/5.8/queries#selects

更改:

$query = 'select id from :my_table';

$results = DB::select(
    DB::raw($query),
    [
        'my_table' => 'advertisement__rentadvertisements',
    ]
);

收件人:

$results = DB::table('advertisement__rentadvertisements')->select('id')->get();

希望它会对您有所帮助。