2012-01-07 2 views
0

저는 곧 새로운 프로젝트를 시작하고 코딩 표준을 사용하려고합니다. 나는 항상이 같은 SQL 문을 작성했습니다 :PHP 문자열 연결에 대한 성능 오버 헤드?

$sql = sprintf("INSERT INTO users (name) VALUES ('%s')", $name); 

나는 이들 중 하나를 사용하여 얻은 모든 성능이 궁금 해요 : 또한

$sql = "INSERT INTO users (name) VALUES ('".$name."')"; 
$sql = "INSERT INTO users (name) VALUES ('$name')"; 

은 :와 변동이 성능 차이를합니까 더 많은 "매개 변수"추가 (코드의 첫 번째 줄의 경우)?

감사합니다.

+1

준비된 진술을 사용하지 않은 이유는 무엇입니까? –

+0

나는 진술서를 작성하는 데 익숙하고 사용법에 대해 생각하고있다. 그래도 여전히 흥미로울 것이다. – Tom

+0

이것들을 벤치마킹 해 보았습니까? – Wiseguy

답변

3

예, 성능이 향상됩니다. sprintf는 additonal 함수 호출이며 추가 문자열이 필요한 % s에 대한 문자열을 검색해야합니다.

문자열 연결 연산자 (.)를 사용하는 두 번째 옵션은 빠르지 만 문자열 변수를 문자열에 배치하는 세 번째 방법은 PHP가 수행하는 다른 최적화로 인해 가장 빠릅니다.

어쨌든 PHP가 문자열 연결을 다루는 방법과 어떻게 수행 하는지를 조사하는 동안 재미있는 일이지만 SQL 주입 코드를 열 수 있으므로 이처럼 SQL 쿼리를 생성해서는 안됩니다. 먼저 매개 변수에 mysql_real_escape()를 적용하거나 prepared statements를 사용하십시오.

+0

보안 정보를 Upvoting. –

+0

정확히 내가 무엇을 찾고 있었습니까. 감사! – Tom

1

내 테스트에서 이 $a . ' ' . $b보다 빠르다고 표시하지 않으며 때로는 속도가 느려질 수도 있습니다.

그러나 둘 다 한계가 있습니다. 일반적으로 세 개 이상의 변수가있을 때 sprintf을 원합니다.