2011-03-04 5 views
6

MySQLi에서 prepared statement를 사용할 때의 이점은 무엇입니까?왜 MySQLi는 진술을 준비 했습니까?

유일한 목적은 쿼리를 보안하는 것이기 때문에 각 쿼리 (준비, bind_param, 실행, 닫기 등)에 많은 코드 줄을 쓰는 대신 mysqli_real_escape_string 같은 것을 사용하여 쿼리를 정리하는 것이 더 낫지 않습니까? ?

+0

실행 시간 및 쿼리 캐싱. – zzzzBov

답변

12

준비 문장은 코드 보안을위한 것이 아닙니다. SQL Server가 구문을 구문 분석하고 쿼리에 대한 실행 계획을 생성하는 데 도움이됩니다.

SELECT를 1000 번 실행하면 SQL 서버는 데이터를 1000 번 가져 오는 방법을 분석, 준비 및 생성해야합니다.

문을 준비하는 경우 준비된 문을 바인딩 된 값이 서로 다른 1,000 번씩 실행하면 문은 한 번만 구문 분석되고 매번 동일한 쿼리 계획이 사용됩니다.

스크립트 내에서 1,000 개의 쿼리를 실행할 때뿐만 아니라 명령문이 1 개만 있고 스크립트를 1,000 번 실행하는 경우에도 도움이됩니다. 서버는 계획 서버 측을 기억할 수 있습니다. 다음에 스크립트를 실행하면 동일한 계획이 다시 사용됩니다.

물론 하나 또는 두 개의 쿼리에 대해서는 사소한 것처럼 보일 수 있지만 많은 수의 쿼리 또는 동일한 쿼리를 반복해서 실행하면 많은 처리 시간이 절약됩니다.

9

은 몇 가지 장점이 있습니다

  • 보안 - 당신은 아무것도 탈출 할 필요가 없습니다, 당신은 단지 매개 변수를 바인딩해야합니다.
  • 정확도 - WHERE $x = 4을 쓰면 $x이 null 인 경우 구문 오류가 발생하지만 WHERE ? = 4이 작동합니다.
  • 성능 준비 쿼리는 다른 매개 변수와 함께 재사용 할 수 있으므로 문자열 재구성을 절약하고 서버에서 다시 구문 분석을 수행 할 수 있습니다.
  • 유지 관리 가능성 - 코드를 훨씬 쉽게 읽을 수 있습니다. SQL을 생성하기 위해 문자열을 연결할 때 많은 SQL과 PHP 코드가 혼합되어 끝나기 쉽습니다. 준비된 문을 사용하면 SQL을 분리하여 변수 값을 결정할 수 있습니다.
관련 문제