Raw Queries DB::select, DB::statement
Submitted by river -
등록 10 years ago - 수정 10 years ago
DB::select
DB::select
는 Eloquent
나 쿼리 빌더
로 해결하기 어려운 복잡한 쿼리를 수행해서 데이타를 선택할 때 사용하면 좋다. 다음의 코드를 생각해 보자.
$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));
Stats
-
0 likes
- 2925 views