php preparedstatement 예제

Friday, 2nd August 2019Miscellaneous

위의 예제에서 볼 수 있듯이 INSERT 문을 한 번만 준비했지만 다른 매개 변수 집합을 전달하여 여러 번 실행했습니다. 준비된 문은 특히 일련의 INSERT 문과 같은 서로 다른 값으로 특정 문을 여러 번 실행할 때 매우 유용합니다. 다음 섹션에서는 사용의 주요 이점에 대해 설명합니다. 또한 InserT에 대한 MySQL 다중 INSERT SQL 구문을 사용하는 것도 고려하십시오. 예를 들어 다중 INSERT는 위에 표시된 명령문보다 서버와 클라이언트 간의 왕복 횟수를 줄여야 합니다. 준비된 문은 이름에서 알 수 있듯이 변수를 저장하지 않고 MySQL 호출을 준비하는 방법입니다. 변수가 결국 에는 거기로 갈 것이라고 말합니다 . 그것을 설명하는 가장 좋은 방법은 모범입니다. 이전 장에서 기억하는 경우 데이터베이스에 데이터를 삽입하는 HTML 양식을 만들었습니다.

여기서는 준비된 문을 구현하여 해당 예제를 확장할 것입니다. 동일한 HTML 양식을 사용하여 다음 삽입 스크립트 예제를 테스트할 수 있지만 양식의 작업 특성에 올바른 파일 이름을 사용하고 있는지 확인합니다. 다음은 데이터를 삽입하기 위한 업데이트된 PHP 코드입니다. 예제를 주의 깊게 보면 mysqli_real_escape_string()을 사용하여 이전 장 예제에서 수행한 것처럼 사용자 입력을 이스케이프하지 않은 것을 알 수 있습니다. 준비된 문에서 사용자 입력은 쿼리 문자열로 직접 대체되지 않으므로 올바르게 이스케이프할 필요가 없습니다. 다음 예제에서는 준비된 문이 실제로 어떻게 작동하는지 보여 줄 것입니다. 첫 번째 예제에서는 WHERE IN 절을 사용 하 여 더미 자리 표시자만 내부에 사용 하는 방법을 보여 주어 있습니다. 다른 장소에서 다른 자리 표시자를 사용하려면 어떻게 해야 합니까? 참고: 다음 두 예제에서는 PHP 5.6 이상이 필요한 인수 압축을 풀기 위해 스플랫 연산을 사용합니다.

보다 낮은 버전을 사용 하는 경우, 그런 다음 call_user_func_array()로 대체할 수 있습니다. 위의 예제에서는 데이터베이스에서 하나의 행을 선택했습니다. 이제 이 단계에서는 여러 행을 선택하고 다차원 배열로 반환합니다. 절차는 INSERT와 매우 유사합니다. 예제를 살펴보겠습니다. 첫 번째 예제와 얼마나 유사한지 알 수 있습니다. 따옴표가 없으면 문자열은 SQL 주입에 동등하게 취약합니다. LIKE 절을 사용하는 경우 mysqli::real_escape_string이 여기에 명시된 대로 이 작업을 수행하지 않으므로 addcslashes ($escaped, `%_`)를 수행해야합니다. 이 문제는 예제와 같이 사용자 입력을 기반으로 하는 경우 악의적인 사용자가 `OR`1`=`1을 수행할 수 있다는 것입니다. 이제 이 문은 1=1 이후 항상 true로 평가됩니다. 이 경우 악의적인 사용자가 이제 전체 테이블에 액세스할 수 있습니다.

대신 DELETE 쿼리인 경우 어떤 일이 발생할 수 있는지 상상해 보십시오. 실제로 문에 무슨 일이 일어나고 있는지 살펴보십시오. 위의 예제의 SQL INSERT 문(줄 no-12) 내에서 물음표는 first_name, last_name, 전자 메일 필드 값의 자리 표시자로 사용됩니다. 이 예제에서는 매직 소프트웨어 엔터프라이즈의 eDeveloper, uniPaaS 및 매직 XPA와 같은 4세대 언어의 Direct SQL을 사용하며, 이 예제에서는 CRUD 작업을 수행하기 위해 데이터베이스에 직원 테이블을 만들고 있습니다. 데이터베이스를 연결하고 CRUD를 수행하기 위해 INSERT, UPDATE, DELETE 및 SELECT 쿼리에 대한 문을 준비합니다. 그런 다음 필요한 경우 쿼리 매개 변수에 값을 바인딩합니다.