Raw Queries DB::select, DB::statement

Submitted by river - 등록 5 years ago - 수정 5 years ago

DB::select

DB::selectEloquent쿼리 빌더로 해결하기 어려운 복잡한 쿼리를 수행해서 데이타를 선택할 때 사용하면 좋다. 다음의 코드를 생각해 보자.

$someVariable = Input::get("some_variable");

$results = DB::select("SELECT * FROM some_table WHERE some_col = '$someVariable'");

위 코드는 SQL Injection에 취약한 문제점을 가지고 있고, 이렇게 사용해서는 절대로 안된다. 이를 보완하기 위해서 다음의 방법 중 하나를 사용할 수 있다.

?를 사용한 바인딩

$someVariable = Input::get("some_variable");

$results = DB::select("SELECT * FROM some_table WHERE some_col = ?", array($someVariable));

:name을 이용한 바인딩

$someVariable = Input::get("some_variable");

$results = DB::select("SELECT * FROM some_table WHERE some_col = :somevariable", array(
   'somevariable' => $someVariable,
 ));

첫번째 방법은 바인딩할 인자가 많은 경우 코드 가독성이 떨어지고, 순서를 잘 지켜야 하는 단점이 있다.

DB::statement

DB::select와 유사한 메서드로 DB::insert, DB::update, DB::statement가 있다. 이 중 DB::statement레코드를 반한하지 않는 쿼리를 수행할 때 사용하면 유용하다.

// Warning: This is a MySQL-specific query
DB::statement('ALTER TABLE HS_Request AUTO_INCREMENT=9999');
DB::statement('ALTER TABLE HS_Request AUTO_INCREMENT=:incrementStart', array('incrementStart' => 9999));

출처: http://fideloper.com/laravel-raw-queries

comments powered by Disqus