【问题标题】:Laravel SQL parameter bindings when using raw sql使用原始 sql 时的 Laravel SQL 参数绑定
【发布时间】:2018-11-15 00:25:22
【问题描述】:

我有以下疑问:

$venues = Venue::select(['id', 'name'])
            ->where('name', 'LIKE', "%{$query}%")
            ->orderByRaw("CASE " .
                         "WHEN name like '{$query}%' THEN 0 " . // start with
                         "WHEN name like '% {$query}%' THEN 1 " . // start of a later word
                         "ELSE 3 " .
                         "END"
            )
            ->limit(5)
            ->get();

问题是上述查询容易受到 SQL 注入的影响。 我该如何解决这个问题?

这里解释了参数绑定:

https://laravel.com/docs/5.6/queries#raw-expressions

但如果我这样做:

$venues = Venue::select(['id', 'name'])
            ->where('name', 'LIKE', "%{$query}%")
            ->orderByRaw("CASE " .
                         "WHEN name like '?%' THEN 0 " . // start with
                         "WHEN name like '% ?%' THEN 1 " . // start of a later word
                         "ELSE 3 " .
                         "END",
                         [
                             $query,
                             $query,
                         ]
            )
            ->limit(5)
            ->get();

我得到不同的结果。

【问题讨论】:

    标签: mysql laravel


    【解决方案1】:

    尝试将百分比添加到查询参数中,如下所示:

    ...
    ->orderByRaw("CASE " .
        "WHEN name like ? THEN 0 " . // start with
        "WHEN name like ? THEN 1 " . // start of a later word
        "ELSE 3 " .
        "END",
        [
            "{$query}%",
            "% {$query}%",
        ]
    )
    ...
    

    【讨论】:

    • 我认为绑定会自动添加''
    猜你喜欢
    • 2014-06-06
    • 2021-11-20
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2021-12-05
    相关资源
    最近更新 更多