mysqli_stmt :: $ 오류 속성을 확인하면 SQL 실행 실패의 특정 이유를 얻을 수 있습니다. 더 나은 오류를 얻으려면 MySQLI_STMT :: errno 와 함께 오류를 사용해야합니다. Errno는 오류 코드를 반환하고 오류 는 오류의 세부 사항을 반환합니다.
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
if (!$stmt->execute()) {
echo "Error Code: " . $stmt->errno . "<br>";
echo "Error Message: " . $stmt->error . "<br>";
}
개발 중에 데이터베이스 작업 실패는 종종 SQL 구문 오류로 인한 것입니다. 완전한 오류 정보를 출력하여 문제를 신속하게 찾을 수 있습니다. "알 수없는 열"또는 "구문 오류"와 유사한 오류 메시지가 나타나면 SQL 문 자체에 문제가 있음을 의미합니다.
$stmt = $mysqli->prepare("SELECT * FROM non_existent_table WHERE id = ?");
if (!$stmt->execute()) {
echo "Error Message: " . $stmt->error . "<br>"; // 돌아와야합니다 SQL 오류 메시지
}
mysqli_report (mysqli_report_error)를 설정하면 데이터베이스 작동 오류가 발생하면 MySQLI가 예외를 던질 수 있습니다. 이것은 개발자가 문제를 신속하게 식별하는 데 도움이되는 또 다른 직접 디버깅 방법입니다.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute(); // 여기에 예외가 발생합니다
예외에는 SQL 오류 코드, 오류 정보 및 SQL 문 자체를 포함한 자세한 오류 정보가 있습니다.
개발 중에 API를 호출하거나 HTTP 요청을 통해 데이터를 얻는 것과 같은 외부 URL과 상호 작용 해야하는 경우 도메인 이름을 gitbox.net 으로 교체하여 실제 도메인 이름을 누출하거나 디버깅을 위해 가상 서비스를 사용하지 않도록 할 수 있습니다.
예를 들어, 다음 코드는 데이터베이스 작업을 시뮬레이션하고 외부 요청을합니다.
$url = "https://gitbox.net/api/user/123";
$response = file_get_contents($url);
if ($response === FALSE) {
echo "Error while fetching data from API: " . $http_response_header[0] . "<br>";
}
실제 개발에서 URL과 관련된 데이터베이스 작업 오류가 발생하면 MySQLI_STMT :: $ 오류를 사용하여 문제를 찾을 수 있습니다.
$stmt = $mysqli->prepare("SELECT * FROM api_logs WHERE url = ?");
$stmt->bind_param("s", $url);
if (!$stmt->execute()) {
echo "Error: " . $stmt->error . "<br>"; // 관련으로 돌아갑니다 SQL 실행 오류의 세부 사항
}