0x01 : PDO가 성공적으로 설치되어 있는지 테스트하십시오
다음 코드를 실행하십시오. 매개 변수가 잘못된 경우 PDO가 설치되었음을 의미합니다. 객체가 존재하지 않으면 php 구성 파일 php.ini를 수정하고 이전 php_pdo_yourssqlserverhere.extis에서 주석을 취소하십시오.
코드 사본은 다음과 같습니다.
$ test = new PDO ();
0x02 : 데이터베이스에 연결하십시오
Apache 서버를 실행하고 서버가 실행되고 PDO 설치가 성공했는지 확인하십시오. 그런 다음 데이터베이스에 연결하겠습니다.
코드 사본은 다음과 같습니다.
$ dsn = 'mysql : dbname = demo; host = localhost; port = 3306';
$ username = 'root';
$ password = 'password_here';
노력하다 {
$ db = new Pdo ($ dsn, $ username, $ password);
} catch (pdoexception $ e) {
다이 ( '데이터베이스에 연결할 수 없습니다 :
'. $ e);
}
0x03 : 기본 쿼리
PDO에서 쿼리 및 exec를 사용하면 쿼리 데이터베이스가 매우 간단합니다. 쿼리 결과의 행 수를 얻으려면 선택 쿼리 문에 매우 유용합니다.
코드 사본은 다음과 같습니다.
$ statement = <<< SQL
선택하다 *
'Foods'에서
여기서`healthy` = 0
SQL;
$ foods = $ db-> query ($ station);
위의 쿼리가 올바른 경우 $ Foods는 이제 PDO 명령문 객체이며, 필요한 결과를 얻을 수 있으며 총체적으로 쿼리 한 결과 수를 얻을 수 있습니다.
0x04 : 행 수를 얻습니다
MySQL 데이터베이스를 사용하는 경우 PDO 문에는 다음 코드와 같이 결과 세트의 행 수를 얻는 RowCount 메소드가 포함되어 있습니다.
코드 사본은 다음과 같습니다.
Echo $ Foods-> RowCount;
0x05 : 트래버스 결과 세트
다음 코드와 같이 PDO 진술은 Forech 문을 사용하여 통과 할 수 있습니다.
코드 사본은 다음과 같습니다.
foreach ($ foods-> fetchall () as $ food) {
echo $ food [ 'name']. '
';;
}
PDO는 또한 페치 방법을 지원하며 첫 번째 결과 만 리턴합니다.
0x06 : 사용자가 입력 한 특수 문자를 탈출하십시오
PDO는 QUOTE라는 메소드를 제공하여 특수 문자가 입력 문자열의 인용문으로 장소를 탈출 할 수 있습니다.
코드 사본은 다음과 같습니다.
$ input = 이것은 'A' '' 'Pretty Danger'str'ing입니다
견적 방법을 사용하여 전송 후 :
코드 사본은 다음과 같습니다.
$ db-> quote ($ input) : '이것은/'s/'a/'/'/'예쁜 위험/'Rous str/'ing '입니다.
0x07 : exec ()
PDO는 exec () 메소드를 사용하여 업데이트, 삭제 및 삽입 작업을 구현할 수 있습니다. 실행 후 영향을받는 행의 수를 반환합니다.
코드 사본은 다음과 같습니다.
$ statement = <<< SQL
'Foods'에서 삭제하십시오
여기서`healthy` = 1;
SQL;
echo $ db-> exec ($ station);
0x08 : 전처리 진술
EXEC 방법과 쿼리는 여전히 PHP에서 널리 사용되고 지원되지만 PHP의 공식 웹 사이트는 여전히 모든 사람이 전처리 명세서를 사용하여이를 대체해야합니다. 왜? 주로 : 더 안전합니다. 전처리 문은 매개 변수를 실제 쿼리에 직접 삽입하지 않으므로 많은 잠재적 인 SQL 주입을 피할 수 있습니다.
그러나 어떤 이유로 든 PDO는 실제로 전처리를 사용하지 않습니다. 전처리 방법을 시뮬레이션하고 SQL 서버에 명령문을 전달하기 전에 매개 변수 데이터를 문에 삽입하여 일부 시스템이 SQL 주입에 취약합니다.
SQL Server가 실제로 전처리를 지원하지 않으면 PDO 초기화 중에 다음과 같이 매개 변수를 전달 하여이 문제를 쉽게 해결할 수 있습니다.
코드 사본은 다음과 같습니다.
$ db-> setAttribute (pdo :: attr_emulate_prepares, false);
다음은 첫 번째 전처리 진술입니다.
코드 사본은 다음과 같습니다.
$ state = $ db-> 준비 ( '이름'=? 및`healthy` =? ');
$ station2 = $ db-> 준비 ( 'name` = : name and`healthy` = : healthy)에서'선택 * *.
위 코드에서 볼 수 있듯이 매개 변수, 이름 및 익명을 만드는 두 가지 방법이 있습니다 (동시에 한 명령문에는 표시 할 수 없습니다). 그런 다음 BindValue를 사용하여 입력을 입력 할 수 있습니다.
코드 사본은 다음과 같습니다.
$ statement-> bindValue (1, 'Cake');
$ statement-> bindValue (2, true);
$ station2-> bindValue ( ': name', 'pie');
$ station2-> bindValue ( ': Healthy', False);
이름이 지정된 매개 변수를 사용할 때는 결장을 포함해야합니다 (:). PDO는 또한 BindParam 방법을 가지고 있으며, 이는 참조별로 숫자 값을 바인딩 할 수 있습니다. 즉, 명령문이 실행될 때만 해당 숫자 값 만 찾습니다.
지금해야 할 유일한 일은 우리의 진술을 실행하는 것입니다.
코드 사본은 다음과 같습니다.
$ state-> execute ();
$ station2-> execute ();
// 결과 얻기 :
$ cake = $ station-> fetch ();
$ pie = $ station2-> fetch ();
BindValue 코드 조각 만 사용하지 않으려면 배열을 사용하여 실행 메소드를 다음과 같은 매개 변수로 제공 할 수 있습니다.
코드 사본은 다음과 같습니다.
$ stater-> execute (array (1 => 'Cake', 2 => true);
$ station2-> execute (array ( ': name'=> 'pie', ': healthy'=> false));
0x09 : 거래
거래는 일련의 쿼리를 실행하는 것이지만 데이터베이스에 미치는 영향을 저장하지는 않습니다. 이점의 장점은 4 상호 의존적 인 삽입 문을 실행하면 실패하면 다른 데이터를 데이터베이스에 삽입 할 수 없도록 롤백하여 상호 의존적 인 필드를 올바르게 삽입 할 수 있다는 것입니다. 사용중인 데이터베이스 엔진이 지원 트랜잭션을 확인해야합니다.
0x10 : 트랜잭션을 시작하십시오
begintransaction () 메소드를 사용하여 트랜잭션을 시작할 수 있습니다.
코드 사본은 다음과 같습니다.
$ db-> begintransaction ();
$ db-> intransaction (); // 진실!
그런 다음 데이터베이스 작동 문을 계속 실행하고 마지막에 거래를 제출할 수 있습니다.
코드 사본은 다음과 같습니다.
$ db-> commit ();
MySQLI와 유사한 롤백 () 메소드도 있지만 모든 유형 (예 : MySQL에서 드롭 테이블 사용)은 실제로 신뢰할 수있는 것은 아니며이 방법에 의존하지 않는 것이 좋습니다.
0x11 : 기타 유용한 옵션
사용할 수있는 몇 가지 옵션이 있습니다. 객체가 초기화되면 네 번째 매개 변수로 입력 할 수 있습니다.
코드 사본은 다음과 같습니다.
$ 옵션 = 배열 ($ 옵션 1 => $ value1, $ 옵션 [..]);
$ db = new PDO ($ dsn, $ username, $ password, $ 옵션);
pdo :: attr_default_fetch_mode
pdo :: fetch_assoc과 같은 결과 유형의 결과 세트 pdo를 선택할 수 있습니다.이를 통해 $ result [ 'column_name'] 또는 pdo :: fetch_obj를 사용할 수 있습니다. 이는 익명 객체를 반환하여 $ result-> column_name을 사용할 수 있습니다.
다음과 같이 각 개별 쿼리의 읽기 모드를 설정하여 결과를 특정 클래스 (모델)에 넣을 수도 있습니다.
코드 사본은 다음과 같습니다.
$ query = $ db-> query ( 'select * from` foods');
$ foods = $ query-> fetchall (pdo :: fetch_class, 'food');
pdo :: attr_errmode
우리는 위에서 이것을 설명했지만, trycatch를 좋아하는 사람들은 pdo :: errmode_exception을 사용해야합니다. 어떤 이유로 든 PHP 경고를 던지려면 pdo :: errmode_warning을 사용하십시오.
PDO :: Att_Timeout
로드 시간을 염려하면이 속성을 사용하여 쿼리의 시간 초과 시간을 몇 초 만에 지정할 수 있습니다. 설정 시간이 시간을 초과하면 pdo :: att_errmode가 변경되지 않으면 기본 E_Warning 예외가 발생합니다.