PDO 클래스는 생성자 __construct를 제공하며 데이터베이스에 연결하는 데 사용됩니다. 이 생성자를 사용하는 경우 다음 매개 변수를 전달해야합니다.
DSN (데이터 소스 이름) : 데이터베이스 유형, 호스트 이름, 데이터베이스 이름 등과 같은 연결 정보가 포함 된 문자열.
사용자 이름 : 데이터베이스 사용자 이름.
비밀번호 : 데이터베이스 비밀번호.
옵션 (선택 사항) : PDO는 설정 오류 모드, 문자 세트 등과 같은 일부 구성 옵션을 제공합니다.
예를 들어:
<span><span><span class="hljs-variable">$dsn</span></span><span> = </span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>;
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'root'</span></span><span>;
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$options</span></span><span> = [
PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span> => PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>, </span><span><span class="hljs-comment">// 오류 처리 모드를 예외로 설정하십시오</span></span><span>
PDO::</span><span><span class="hljs-variable constant_">ATTR_DEFAULT_FETCH_MODE</span></span><span> => PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>, </span><span><span class="hljs-comment">// 데이터 검색의 기본 메소드를 설정하십시오</span></span><span>
];
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Connection failed: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>
이 예에서는 DSN 문자열을 전달하여 MySQL 데이터베이스에 연결하고 오류 처리 모드를 설정합니다.
기본적으로 pdo의 오류 처리 모드는 pdo :: errmode_silent 입니다. 즉, 예외가 발생하지 않지만 오류 코드가 반환됩니다. 따라서 오류가 있으면 프로그램에 자동으로 예외가 발생하지 않으므로 오류 코드를 명시 적으로 확인하고 처리해야합니다. 이로 인해 잠재적 오류가 무시되어 문제 해결이 어려워 질 수 있습니다.
코드를보다 강력하게 만들려면 오류 처리 모드를 pdo :: errmode_exception 으로 설정하는 것이 좋습니다. 즉, 오류가 발생하면 pdo가 pdoexception 예외를 던집니다. 이렇게하면 시도 캐치 구조를 통해 예외를 잡고 처리 할 수 있습니다.
<span><span><span class="hljs-variable">$options</span></span><span> = [
PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span> => PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>, </span><span><span class="hljs-comment">// 예외를 던지도록 설정하십시오</span></span><span>
PDO::</span><span><span class="hljs-variable constant_">ATTR_DEFAULT_FETCH_MODE</span></span><span> => PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>,
];
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Connection failed: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>
위의 코드에서 pdo :: att_errmode => pdo :: errmode_exception이 오류가 발생하면 예외를 던지도록 설정됩니다. 예외를 잡아서 캐치 블록으로 처리하고 프로그램 충돌을 방지하며 유용한 오류 메시지를 출력하십시오.
pdo :: errmode_exception은 데이터베이스 작업에서 예외가 발생할 때 PDOException 예외가 자동으로 재투를하게됩니다. Try-Catch 문서에서 이러한 예외를 포착 할 수 있습니다.
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
</span><span><span class="hljs-comment">// 데이터베이스 작업을 수행합니다</span></span><span>
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'데이터베이스 연결 오류: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>
Catch 문서에서 우리는 $ e-> getMessage () 를 통해 예외의 세부 사항을 얻습니다. 이는 디버깅 및 로깅에 매우 중요합니다.
인터페이스에 오류 메시지를 표시하는 것 외에도 후속 분석 및 문제 해결을 위해 로그에 예외 정보를 기록하는 것이 좋습니다. php의 error_log () 함수를 사용하거나 독백과 같은 로그 라이브러리를 통합 하여이 정보를 기록 할 수 있습니다.
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">'데이터베이스 연결 오류: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>());
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'데이터베이스 연결에 실패했습니다,나중에 다시 시도하십시오!'</span></span><span>;
}
</span></span>
사용자 이름이나 암호가 올바르지 않으면 PDO는 pdoException 예외를 던지고 오류 메시지에는 일반적으로 액세스 거부가 포함됩니다.
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'invalid_user'</span></span><span>, </span><span><span class="hljs-string">'wrong_password'</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'데이터베이스 연결 오류: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>(); </span><span><span class="hljs-comment">// 산출“Access denied”실수</span></span><span>
}
</span></span>
지정된 데이터베이스가 존재하지 않으면 PDO는 알 수없는 데이터베이스 'TestDB' 와 같은 오류를 던집니다.
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=nonexistent_db'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'데이터베이스 연결 오류: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>(); </span><span><span class="hljs-comment">// 산출“Unknown database”실수</span></span><span>
}
</span></span>
데이터베이스 서버를 사용할 수 없거나 연결이 시간이 초과되면 PDO는 연결 관련 예외를 던집니다.
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=nonexistent_host;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'데이터베이스 연결 오류: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>(); </span><span><span class="hljs-comment">// 산출“Could not find driver”또는“Connection timed out”</span></span><span>
}
</span></span>
관련 태그:
PDO