MySQL/PHP에서 매개 변수화 된 쿼리를 사용하는 방법에 대한 예제를 알려주시겠습니까?매개 변수화 된 쿼리의 예
답변
매개 변수가있는 쿼리는 기본적으로 모든 입력을 멀리 추상화하는 쿼리입니다. 이것은 모든 입력을 무해하게하는 것 (예 : 해로운 주사가 가능하지 않음)과 미리 파싱되고 컴파일되기 때문에 반복적으로 사용될 때 더 빨리 만드는 것과 같은 몇 가지 좋은 부작용이 있습니다. 따라서 엔진은 주어진 입력을 적용하는 방법을 알고 있습니다. 순수의 MySQL의 예는 다음과 같습니다
PREPARE qry FROM "INSERT INTO tbl VALUES (?)";
성명은 지금 컴파일 및 캐시, 재 컴파일하고 해석 할 필요없이 반복적으로 실행 할 수있다 : PHP에서 사용하는 경우
SET @var = "some input";
EXECUTE qry USING @var;
SET @var = "some other input";
EXECUTE qry USING @var;
, 그것은 보통처럼 이은 (단축) :
$stmt = prepare('INSERT INTO tbl VALUES(?)');
execute($stmt, array("some input"));
execute($stmt, array("some other input"));
execute($stmt, array("some more input"));
내가 완전히 이해하지 않는다 이것이 SQL 주입을 어떻게 멈추게하는지. 나는 그것이 그렇다는 것을 의심하지 않지만 더 설명 할 수 있겠는가? –
매개 변수가 입력되기 전에 쿼리가 미리 컴파일되기 때문에. 그래서 하나의 매개 변수가'';, DELETE FROM stuff; '등이라도 컴파일 된 문장이 말하는 모든 곳으로, 완전한 문자열로 삽입된다. 파서를 통과하지는 않는다. 'eval()'과 같이 비교할 수 있습니다 :'eval ("new class ($ data);")'데이터가''; delete_all_my_files ('')로 간주하십시오. 미리 컴파일 된 명령문은 기본적으로 "eval"문제. –
PREPARE stmt_name FROM "SELECT name FROM Country WHERE code = ?";
SET @test_parm = "FIN";
EXECUTE stmt_name USING @test_parm;
http://www.google.com.au/search?hl=en&source=hp&q=+MySQL++parameterized+queries&meta=&aq=f&oq= –