2015-02-03 3 views
2

На данный момент я использую:Разница между DB :: Стол и DB :: Выбрать

DB::select('select * from users '); 

но теперь я читаю на http://laravel.com/docs/4.2/queries

о:

$users = DB::table('users')->get(); 

Оба отдайте то же самое. Есть ли что-то другое между этими двумя?

В документации это сказать: Note: The Laravel query builder uses PDO parameter binding throughout to protect your application against SQL injection attacks. There is no need to clean strings being passed as bindings.

Для второго способа. Означает ли это, что первый метод не защищает вас от SQL-инъекций? Второй способ - лучший способ? Оба возвращают результаты по-другому, а также правильно?

Могу ли я получить объяснение по этому поводу?

ответ

2

Нет, единственная разница здесь в синтаксисе. Да, DB::select не защищает от SQL-инъекций. Но SQL-инъекция - это только риск, когда вы передаете ввод пользователя. Например, это уязвимо для инъекции SQL:

DB::select('SELECT * FROM users WHERE name = "'.Input::get('name').'"'); 

Принимая во внимание, что это не так:

DB::table('users')->where('name', Input::get('name'))->get(); 

Но и это не так: (Использование привязок "вручную")

DB::select('SELECT * FROM users WHERE name = ?', array(Input::get('name'))); 

Большое преимущество конструктора запросов (помимо автоматической защиты от SQL-инъекции) - это гибкий синтаксис. Например, вы можете использовать цикл для добавления where:

$query = DB::table('users'); 

foreach($names as $name){ 
    $query->orWhere('name', 'LIKE', $name.'%'); 
} 

$result = $query->get(); 
+0

Поскольку вы ответили, как и все мои вопросы сегодня. Могу ли я спросить вас о чем-то другом (не стоит задавать вопрос об этом), но, может быть, лучше сделать это в чате? – Loko

+0

Уверен, вы можете пригласить вас в чат на chat.stackoverflow.com – lukasgeiter

+0

Подождите, как я могу вас пригласить? – Loko

Смежные вопросы