Привязка параметров Laravel SQL при использовании raw sql - PullRequest
0 голосов
/ 05 июня 2018

У меня следующий запрос:

$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();

Я получаю другоерезультаты.

1 Ответ

0 голосов
/ 05 июня 2018

Попробуйте добавить процент к параметру запроса, например:

...
->orderByRaw("CASE " .
    "WHEN name like ? THEN 0 " . // start with
    "WHEN name like ? THEN 1 " . // start of a later word
    "ELSE 3 " .
    "END",
    [
        "{$query}%",
        "% {$query}%",
    ]
)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...