전처리 명세서를 통해 SQL 문의 구조 및 데이터가 분리되어 악의적 인 사용자 주입의 위험을 피합니다.
실행 효율성 향상 <br> 반복적 인 실행 설명의 경우 데이터베이스 서버는 성능을 향상시키기 위해 SQL 구조를 한 번만 구문 분석하면됩니다.
명확한 코드 구조 <br> 매개 변수 바인딩은 코드를 쉽게 읽을 수있게하고 접합 문자열의 복잡성을 줄입니다.
표준 사용 예는 다음과 같습니다.
<code> <? php // 1. 데이터베이스에 연결 $ mysqli = new MySqli ( "gitbox.net", "username", "password", "database"); // 연결을 확인합니다
if ($ mysqli-> connect_errno) {
다이 ( "연결 실패 :". $ mysqli-> connect_error);
}
// 2. SQL 문을 준비하십시오
$ sql = "사용자에 삽입 (사용자 이름, 이메일, 연령) 값 (?,?,?);
$ stmt = $ mysqli-> 준비 ($ sql);
if (! $ stmt) {
다이 ( "전처리 실패 :". $ mysqli-> error);
}
// 3. 파라미터 바인드
// 'ssi'는 매개 변수 유형을 나타내고, s는 문자열을 나타내고, 나는 정수를 나타냅니다.
$ username = "Alice";
$ email = " [email protected] ";
$ Age = 25;
$ stmt-> bind_param ( "ssi", $ username, $ email, $ age);
// 4. 진술을 실행하십시오
if ($ stmt-> execute ()) {
echo "삽입, 삽입 ID는 다음과 같습니다.". $ stmt-> insert_id;
} 또 다른 {
Echo "실행 실패 :". $ stmt-> 오류;
}
// 5. 진술과 연결을 닫습니다
$ stmt-> close ();
$ mysqli-> close ();
?>
</코드>
새로운 mysqli (호스트, 사용자, Pass, dbname)를 사용하여 데이터베이스에 연결하십시오.
생산 환경에서 Die () 대신 예외 처리 또는 오류 로그를 사용하는 것이 좋습니다.
물음표를 사용 하시겠습니까 ? SQL 문의 매개 변수 자리 표시 자로.
준비 () 가 false를 반환하면 구문 오류 또는 연결 예외를 의미합니다.
변수를 진술의 인수에 바인딩합니다.
매개 변수 유형은 문자열로 표시되며 일반적인 것은 다음과 같습니다.
s String (String)
나는 정수
D 이중 정밀도 (이중)
B 바이너리 (blob)
변수는 참조 패스 여야하며 실행 전에 할당해야합니다.
전처리 문을 실행하려면 $ stmt-> execute ()를 호출하십시오.
반환 된 결과에 따라 실행이 성공했는지 판단합니다.
전처리 명세서 $ stmt-> close () 를 닫아 서버 리소스를 확보하십시오.
데이터베이스 연결을 닫으십시오 $ mysqli-> close () .
매개 변수 유형은 올바르게 일치해야합니다 <br> 잘못된 매개 변수 유형으로 인해 데이터 삽입 실패 또는 데이터 유형 변환 오류가 발생할 수 있습니다.
실행 전에 바운드 변수를 할당해야합니다 . <br> 그렇지 않으면 NULL 또는 잘못된 값이 삽입 될 수 있습니다.
예외 처리 및 오류 로그 <br> die ()를 직접 사용하는 것이 좋습니다. 예외 메커니즘을 사용하여 프로그램의 견고성을 보장하기 위해 오류를 잡을 수 있습니다.
배치 인서트 <br> 배치 인서트가 필요한 경우 루프 바인딩 매개 변수 및 실행을 사용할 수 있지만 트랜잭션을 사용하여 원자력을 보장하는 것이 좋습니다.
캐릭터 인코딩 일관성 <br> 데이터베이스 및 PHP 스크립트의 문자 인코딩이 일관성이 있는지 확인하고 코드를 피하십시오.
insert_id주의 <br> $ stmt-> insert_id를 사용하여 AutoinCrement 기본 키를 얻을 때 테이블에 자동화 열이 있는지 확인하십시오.