: 예외 메커니즘 ( pdoexception )을 통해 연결 및 쿼리 오류를보고합니다. 코드는 try ... catch를 사용하여 캡처 할 수 있으며 예외 정보에는 자세한 오류 설명이 포함되어 있습니다.
mysqli : $ mysqli-> connect_error 및 $ mysqli-> connect_errno 와 같은 속성 및 메소드를 사용하여 연결 오류를보고합니다. 오류는 자동으로 예외를 던지지 않으며 적극적으로 감지하고 처리해야합니다.
다시 말해, PDO는 예외 메커니즘에 더 의존하는 반면 MySQLI는 명시 적 오류 확인에 더 의존합니다.
try {
$pdo = new PDO('mysql:host=gitbox.net;dbname=testdb;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "연결이 성공적으로 연결됩니다";
} catch (PDOException $e) {
echo "연결이 실패했습니다: " . $e->getMessage();
}
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'testdb');
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
echo "연결이 성공적으로 연결됩니다";
참고 : MySQLI는 $ mysqli-> connect_error를 통해 연결 오류 메시지를 가져 오며 자동으로 예외를 제외하지 않으며 수동으로 점검해야합니다.
PDO는 예외를 사용하며 코드 구조는 더 간단하고 안전합니다.
mysqli는 $ mysqli-> connect_error 또는 $ mysqli-> connect_errno를 명시 적으로 판단해야합니다.
시도를 사용하는 데 익숙한 경우 ... 예외를 잡으려면 CATCH를 잡으십시오 . MySQLI로 전환 한 후 오류 처리 로직을 조정해야합니다.
PDO는 charset = utf8 과 같은 DSN Connection String에서 설정된 문자를 직접 지정합니다. MySQLI는 추가 호출이 필요합니다.
$mysqli->set_charset('utf8');
그렇지 않으면, 중국어가 달린 코드에 문제가 있습니다.
PDO는 많은 연결 옵션을 지원하는 반면 MySQLI는 일부 옵션을 지원합니다. 예를 들어:
pdo는 pdo :: att_persistent 로 활성화 될 수 있습니다.
MySQLI는 추가 처리가 필요하거나 지속적인 연결을 가능하게하기 위해 다른 방법을 사용해야합니다.
PDO 사전 처리 명세서는 $ stmt = $ pdo-> repay ($ sql)를 사용합니다. 이름이 지정된 매개 변수 바인딩을 지원합니다.
mysqli preprocessing statement는 $ stmt = $ mysqli-> prepar ($ sql)를 사용합니다. 및 물음표 자리 소유자 만 지원됩니다.
원래 코드가 많은 수의 이름이 지정된 매개 변수를 사용하는 경우 물음표로 다시 작성해야합니다.
MySQLI는 기본적으로 예외를 제외하지 않습니다. PDO의 예외 캡처를 시뮬레이션하려면 MySQLI 예외 던지기 기능을 활성화 할 수 있습니다.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
열린 후 MySQLI는 MySQLI_SQL_Exception을 던지므로 통합 방식으로 오류를 처리하기가 더 쉽습니다.
프로젝트 | pdo | mysqli |
---|---|---|
오류 처리 | 예외 캐치 (시도 ... 캐치) | 예외를 활성화하려면 $ connect_error를 외부 확인하십시오 |
연결 문자열 형식 | DSN String (charset set to set) | charset을 별도로 설정하면 set_charset ()을 호출해야합니다. |
전처리 매개 변수 결합 | 이름 지정 매개 변수를 지원합니다 | 물음표 자리 소유자 만 지원됩니다 |
지속적인 연결 지원 | 옵션별로 설정합니다 | 구현하려면 다른 방법이 필요합니다 |
요컨대, PDO에서 MySQLI로 전환하는 것은 교체 연결 방법 일뿐 만 아니라 오류 처리, 인코딩 설정, 전처리 명세서 등의 차이를 포괄적으로 고려하여 부과로 인한 버그를 피하기 위해 포괄적으로 고려합니다.