Эти два примера дают один и тот же результат, хотя и с разными типами данных.
Использование необработанных запросов действительно может быть вектором атаки, если вы не избегаете значений, используемых в запросе (особенно тех, которые поступают из пользовательского ввода).
Однако это можно очень легко уменьшить, используя привязки, передаваемые в качестве второго параметра любого метода необработанного запроса, как показано в та же документация (selectRaw
принимает второй параметр как массив привязок, а также другие необработанные методы из построителя запросов, такие как whereRaw
и т. д.). Фактически, в начале страницы документации, на которую вы ссылались, во втором абзаце также говорится следующее:
Конструктор запросов Laravel использует привязку параметров PDO для защиты вашего приложения от атак с использованием SQL-инъекций. Нет необходимости очищать строки, передаваемые как привязки.
Поэтому, если вы будете осторожны и убедитесь, что все параметры передаются как привязки, а не конкатенируются как простые значения в необработанной строке запроса, вы должны быть в безопасности.
person
Bogdan
schedule
17.05.2018
DB::select
уже принимает необработанную строку запроса SQL, поэтому внутреннийDB::raw
во втором примере не нужен и фактически испортит такие вещи, как ведение журнала запросов. - person hackel   schedule 07.10.2020