Latest web development tutorials
×

PHP 코스

PHP 코스 PHP 간략한 소개 PHP 설치 PHP 문법 PHP 변수 PHP echo/print PHP 데이터 유형 PHP 상수 PHP 현 PHP 운영자 PHP If...Else PHP Switch PHP 배열 PHP 배열을 정렬 PHP 자동 전역 PHP While 순환 PHP For 순환 PHP 기능 PHP 매직 변수 PHP 네임 스페이스 PHP 객체 지향

PHP 형태

PHP 형태 PHP 폼 인증 PHP 형태 - 필수 입력 사항 PHP 형태 - 확인 이메일 및 URL PHP 완전한 형태의 인스턴스 PHP $_GET 변수 PHP $_POST 변수

PHP 고급 자습서

PHP 다차원 배열 PHP 날짜 PHP 포함 PHP 파일 PHP 파일 업로드 PHP Cookie PHP Session PHP E-mail PHP 보안 E-mail PHP Error PHP Exception PHP 필터 PHP 고급 필터 PHP JSON

PHP 7 새로운 기능

PHP 7 새로운 기능

PHP 데이터베이스

PHP MySQL 간략한 소개 PHP MySQL 연결 PHP MySQL 데이터베이스 만들기 PHP MySQL 데이터 테이블 만들기 PHP MySQL 데이터를 삽입 PHP MySQL 여러 데이터를 삽입 PHP MySQL 문 준비 PHP MySQL 데이터 읽기 PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX 간략한 소개 AJAX PHP AJAX 데이터베이스 AJAX XML AJAX 실시간 검색 AJAX RSS Reader AJAX 투표

PHP 참조 설명서

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP 이미지 처리 PHP RESTful

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 = "존";
$ 성 = "미상";
$ 이메일 = "[email protected]";
$ Stmt->) (실행;

$ FIRSTNAME = "마리아";
$ 성 = "모에";
$ 이메일 = "[email protected]";
$ Stmt->) (실행;

$ FIRSTNAME = "줄리";
$ 성 = "둘리";
$ 이메일 = "[email protected]";
$ 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 = "존";
$ 성 = "미상";
$ 이메일 = "[email protected]";
$ Stmt->) (실행;

다른 행을 삽입 //
$ FIRSTNAME = "마리아";
$ 성 = "모에";
$ 이메일 = "[email protected]";
$ Stmt->) (실행;

다른 행을 삽입 //
$ FIRSTNAME = "줄리";
$ 성 = "둘리";
$ 이메일 = "[email protected]";
$ Stmt->) (실행;

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