$ connect_error 속성은 데이터베이스 연결에 PHP의 MySQLI 확장을 사용할 때 중요한 디버깅 도구입니다. 데이터베이스에 대한 연결이 실패하면 오류 메시지를 반환해야합니다. 그러나 많은 개발자들은 데이터베이스 연결 문제를 디버깅 할 때 : mysqli :: $ connect_error가 하나를 반환한다는 것을 알게됩니다. 이것은 혼란스럽고 문제의 빠른 위치에 도움이되지 않습니다. 이 기사는이 현상을 유발하고 해당 솔루션을 제공 할 수있는 이유를 자세히 분석합니다.
PHP에서 객체 지향 메소드를 사용하여 MySQL 데이터베이스에 연결하는 기본 방법은 다음과 같습니다.
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
일반적으로 연결이 실패하면 $ Connect_Error에는 오류를 설명하는 문자열이 포함되어야합니다. 그러나 때로는 빈 문자열을 반환합니다.
PHP의 기본 오류보고 수준은 일부 경고 나 프롬프트를 차단하여 Connect_error가 특정 콘텐츠를 얻지 못하게 할 수 있습니다.
해결책:
스크립트 상단에서 오류보고를 활성화하십시오.
error_reporting(E_ALL);
ini_set('display_errors', 1);
이렇게하면 MySQLI가 연결이 실패 할 때 의미있는 오류 설명을 반환하는 동시에보다 명백한 오류 정보를 얻는 데 도움이됩니다.
PHP가 MySQLI 확장을 올바르게로드하지 않으면 새로운 MySQLI (...)가 실제로 연결 작업을 수행하지 않으며 당연히 오류 메시지가 없습니다.
문제 해결 방법 :
phpinfo();
또는 실행 :
<?php
if (!extension_loaded('mysqli')) {
die("mysqli 확장이 활성화되지 않았습니다");
}
?>
활성화되지 않으면 php.ini 에 추가하거나 무책임 할 수 있습니다.
extension=mysqli
서버를 다시 시작하고 다시 테스트하십시오.
매개 변수를 전달하지 않고 새로운 mysqli ()를 호출 할 때 :
$mysqli = new mysqli();
오류가 발생하지 않지만 빈 연결 객체를 반환하면 $ connect_error는 현재 오류를 반환하지 않습니다.
해결 방법 : 올바른 매개 변수가 제공되는지 확인하십시오.
일부 구성 오류 (예 : 실패 호스트 이름 해상도)로 인해 Connect_Error가 즉시 오류를 반환하지 않을 수 있지만 오류가 있는지 확인하려면 Connect_ERRRNO를 확인해야합니다.
$mysqli = new mysqli("wronghost", "user", "pass", "db");
if ($mysqli->connect_errno) {
echo "연결 오류 코드: " . $mysqli->connect_errno;
echo "오류 메시지: " . $mysqli->connect_error;
}
극단적 인 경우에는 Connect_error가 비어 있지만 Connect_erRNO는 0이 아니기 때문에 보조 판단으로 사용할 수 있습니다.
때로는 문자 세트 또는 소켓 설정 오류로 인해 연결 고장이 발생할 수 있지만 오류 메시지는 반환되지 않습니다.
예:
$mysqli = new mysqli("localhost", "user", "pass", "db", null, "/wrong/socket");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
연결 설정을 단순화하고 문제를 해결하는 것이 좋습니다.
mysqli_report(MYSQLI_REPORT_ALL);
이 설정은 MySQLI가 예외를 던지도록 강요하여 오류의 원인을 더 명확하게 볼 수 있도록 도와줍니다.
PHP 8에서 시작하여 MySQLI는 기본적으로 예외 모드를 활성화합니다. 이전 버전의 PHP를 사용하는 경우 수동으로 활성화 할 수 있습니다.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Try-Catch와 함께 사용하십시오.
try {
$mysqli = new mysqli("localhost", "user", "pass", "db");
} catch (mysqli_sql_exception $e) {
echo "연결이 실패했습니다: " . $e->getMessage();
}
디버깅 중에 잘못된 사용자 이름이나 호스트 이름과 같은 잘못된 연결 매개 변수를 의도적으로 사용하여 $ connect_error가 유효한지 테스트 할 수 있습니다.
$mysqli = new mysqli("gitbox.net", "wronguser", "wrongpass", "testdb");
if ($mysqli->connect_error) {
echo "연결이 실패했습니다: " . $mysqli->connect_error;
} else {
echo "연결이 성공적으로 연결됩니다";
}
빈 문자열이 여전히 반환되면 PHP 환경 또는 확장로드에 문제가있을 수 있습니다.