최고의 PHP MySQL은 제표를 작성 튜토리얼 2024년, 이 튜토리얼에서는 준비 제표 및 바인딩 매개 변수,mysqli 함수가 제표를 작성,예 (준비된 문을 사용하여 mysqli 함수),PDO는에 제표를 작성,예 (PDO 준비된 문을 사용하여),를 배울 수 있습니다.

PHP MySQL은 제표를 작성

준비된 문은 MySQL의 주입이 매우 유용 방지합니다.


준비 제표 및 바인딩 매개 변수

동일한 SQL 문장을 복수 실행 문 준비하고,보다 효율적으로 수행한다.

준비된 명령문의 작품은 다음과 같습니다 :

  1. 전처리 : 데이터베이스로 전송 템플릿 SQL 문을 작성합니다. 파라미터의 값은 예약 된 "?"마크. 예를 들면 :

    INSERT 
    	INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
  2. 데이터베이스 분석, 컴파일 SQL 문 템플릿 쿼리 최적화를 실행하고 결과가 출력되지 않습니다 저장합니다.

  3. 실행 : 마지막으로, 매개 변수의 값 ( "?"마크)을 결합 응용 프로그램에 전달, 데이터베이스 문을 실행합니다. 파라미터 값이 동일하지 않은 경우 애플리케이션이 여러 번 수행 될 수있다.

SQL 문을 직접 실행에 비해 준비된 문장은 두 가지 장점이 있습니다 :

  • (명령문이 실행되지만) 준비된 문은 극적으로 만 쿼리를 분석 시간을 줄일 수 있습니다.

  • 바인딩 파라미터 만 전체 문장 대신 파라미터 질의를 보낼 필요가 서버의 대역폭을 감소시킨다.

  • 이후, 데이터의 정당성을 보장하는 파라미터 값을 전송하도록 다른 프로토콜을 사용하기 때문에 SQL 인젝션 대해 준비된 명령은 매우 유용하다.


mysqli 함수가 제표를 작성

다음의 예는 준비된 문에서 mysqli 함수를 사용하고 해당 매개 변수를 바인딩 :

예 (준비된 문을 사용하여 mysqli 함수)

<? PHP는
$ 서버 이름 = "로컬 호스트";
$ 사용자 이름 = "사용자 이름";
$ 암호 = "암호";
$ DBNAME = "MYDB";

연결을 생성 //
$ 코네티컷 주 = 새로운 mysqli 함수 ($ 서버 이름, $ 이름, $ 암호, $의 DBNAME);

// 연결 테스트
경우 ($ conn-> connect_error) {
( "연결 실패 :"$ conn-> connect_error.) 다이;
}

// 전처리 및 바인딩
$ 됨 Stmt = $ conn-> ( "MyGuests (이름, 성, 이메일) VALUES (,,)? INTO입니까?")를 준비;
$ Stmt-> bind_param ( "SSS", $의 FIRSTNAME, $의 LASTNAME, $ 이메일);

// 파라미터 설정 및 수행
$ FIRSTNAME = "존";
$ 성 = "미상";
$ 이메일 = "john@example.com";
$ Stmt->) (실행;

$ FIRSTNAME = "마리아";
$ 성 = "모에";
$ 이메일 = "mary@example.com";
$ Stmt->) (실행;

$ FIRSTNAME = "줄리";
$ 성 = "둘리";
$ 이메일 = "julie@example.com";
$ Stmt->) (실행;

"새로운 레코드가 성공적으로 삽입된다"에코;

$ Stmt-> 닫기 ();
$ Conn-> 닫기 ();
?>

다음 예제 코드의 각 줄을 구문 분석 :

"(?,?,?) MyGuests (이름, 성, 이메일) 값으로 INSERT"

SQL 문에서, 우리는 물음표 (?)를 사용하여, 여기에서 우리는 물음표 정수, 문자열, 배정 밀도 부동 소수점 및 부울 값을 대체 할 수 있습니다.

다음으로, 우리가) (bind_param에서 기능을 살펴 보자 :

$ Stmt-> bind_param ( "SSS", $의 FIRSTNAME, $의 LASTNAME, $ 이메일);

함수 바인드 SQL 파라미터, 데이터베이스 파라미터의 값을 말한다. 나머지 매개 변수는 "SSS"열 처리 파라미터 데이터 유형. 의 문자는 데이터베이스 매개 변수 문자열을 알려줍니다.

매개 변수의 네 가지 유형이 있습니다 :

  • 난 - 정수 (정수)
  • D - 더블 (배정 밀도 부동 소수점)
  • 의 - 문자열 (문자열)
  • B - BLOB (이진 대형 개체 : 이진 대형 개체)

각 매개 변수 유형을 지정해야합니다.

데이터 유형 파라미터는 상기 데이터베이스를 지시하면 SQL 인젝션의 위험을 줄일 수있다.

주의 참고 : 추가 데이터 (사용자 입력)를 삽입 할 경우, 데이터의 검증은 매우 중요하다.


PDO는에 제표를 작성

다음의 예는 우리가 PDO 및 바인딩 매개 변수에 준비된 문을 사용 :

예 (PDO 준비된 문을 사용하여)

<? PHP는
$ 서버 이름 = "로컬 호스트";
$ 사용자 이름 = "사용자 이름";
$ 암호 = "암호";
$ DBNAME = "myDBPDO";

{시도
$ 코네티컷 주 = 새로운 PDO ( "MySQL은 : 호스트 = $ 서버 이름, DBNAME = $ DBNAME", $ 이름, $ 암호);
PDO 오류 모드 예외를 설정 //
$ Conn->의 setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);

// 전처리 및 SQL 바인드 매개 변수
$ 됨 Stmt = $ conn-> 준비 ( "(MyGuests INTO INSERT 이름, 성, 이메일)
VALUES (: FIRSTNAME, : LASTNAME, : 이메일) ");
$ Stmt-> bindParam ( ': FIRSTNAME', $의 FIRSTNAME);
$ Stmt-> bindParam ( 'LASTNAME', $의 LASTNAME);
$ Stmt-> bindParam ( '이메일', $ 이메일);

// 삽입 행
$ FIRSTNAME = "존";
$ 성 = "미상";
$ 이메일 = "john@example.com";
$ Stmt->) (실행;

다른 행을 삽입 //
$ FIRSTNAME = "마리아";
$ 성 = "모에";
$ 이메일 = "mary@example.com";
$ Stmt->) (실행;

다른 행을 삽입 //
$ FIRSTNAME = "줄리";
$ 성 = "둘리";
$ 이메일 = "julie@example.com";
$ Stmt->) (실행;

"새로운 레코드가 성공적으로 삽입된다"에코;
}
캐치 (PDOException의 $ 전자)
{
ko 에코 $의 SQL "로 <br>"$ 전자> GetMessage 함수 ();
}
$ 코네티컷 주 = NULL;
?>

PHP MySQL은 제표를 작성
10/30