MySQLI 확장은 데이터베이스 작업에 PHP를 사용할 때 매우 일반적인 도구입니다. 그러나 일부 개발자는 MySqli :: $ errno가 오류를 처리 할 때 오류를 포착 할 수없는 상황을 만날 수 있습니다. 여러 번, 이것은 코드 자체에 문제가되지 않지만 MySQLI 객체 인스턴스가 잘못 사용되기 때문입니다.
이 기사에서는 MySQLI 오류 캡처 메커니즘을 깊이 탐색하고 MySQLI :: $ errno가 오류를 잡을 수없는 이유를 분석하고 올바른 사용 방법을 제공합니다.
먼저 데이터베이스에 연결하고 MySQLI를 사용하여 쿼리를 실행하는 방법을 간략하게 검토해 봅시다. 일반적으로 다음 코드를 사용하여 데이터베이스 연결을 설정합니다.
<?php
$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'test_db';
// 만들다 MySQLi 객체 인스턴스
$mysqli = new mysqli($host, $username, $password, $dbname);
// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
die('연결이 실패했습니다: ' . $mysqli->connect_error);
}
?>
이 코드는 새로운 mysqli () 를 통해 새로운 mysqli 객체 인스턴스 $ mysqli를 생성하고 연결이 실패하면 오류 메시지를 출력합니다.
후속 코드에서 쿼리를 실행하고 문제가있는 경우 $ mysqli-> errno 및 $ mysqli-> 오류가 오류를 잡고 진단하는 데 도움이 될 수 있습니다.
MySQLI에서 $ errno는 마지막 오류 코드를 저장하는 데 사용되며 $ 오류는 오류에 대한 설명을 저장합니다. 일반적으로 다음과 같은 방법으로 오류를 포착 할 수 있습니다.
<?php
$sql = "SELECT * FROM non_existent_table"; // 의도적으로 테이블 이름을 작성했습니다
$result = $mysqli->query($sql);
if ($mysqli->errno) {
echo "MySQL 실수: " . $mysqli->error;
} else {
// 프로세스 쿼리 결과
}
?>
이 코드에서는 존재하지 않는 테이블을 의도적으로 쿼리합니다. 쿼리가 실패하면 $ mysqli-> errno는 오류 코드를 포착하고 $ mysqli-> 오류가 오류 메시지를 표시합니다.
그렇다면 왜 우리는 때때로 mysqli :: $ errno가 오류를 잡을 수없는 상황을 만나는가? 가장 일반적인 이유 중 하나는 여러 MySQLI 객체 인스턴스가 잘못 사용되거나 쿼리가 만들어지면 오류를 올바르게 점검하지 않기 때문입니다.
예를 들어, mysqli를 사용하는 경우 다음과 같이 사용합니다.
<?php
// 실수的用法:올바른 용도가 없습니다 MySQLi 객체 인스턴스
$mysqli1 = new mysqli($host, $username, $password, $dbname);
$mysqli2 = new mysqli($host, $username, $password, $dbname);
$sql = "SELECT * FROM non_existent_table";
$result = $mysqli1->query($sql); // 사용 $mysqli1 질문
// 사용실수的实例来检查실수
if ($mysqli2->errno) { // 실수!应该사용 $mysqli1 来检查실수
echo "MySQL 실수: " . $mysqli2->error;
}
?>
위의 코드에서, 우리는 두 개의 mysqli 객체 $ mysqli1 및 $ mysqli2 를 만들었지 만 쿼리를 수행 할 때 $ mysqli1 을 사용했으며 오류 확인을 $ mysqli2 로 사용했습니다. $ mysqli2가 쿼리를 실행하지 않으므로 오류가 발생하지 않습니다.
오류가 올바르게 잡힐 수 있도록 쿼리 및 확인 오류를 수행하려면 항상 동일한 MySQLI 객체 인스턴스를 사용해야합니다. 수정 된 코드는 다음과 같습니다.
<?php
$mysqli = new mysqli($host, $username, $password, $dbname);
$sql = "SELECT * FROM non_existent_table"; // 의도적으로 테이블 이름을 작성했습니다
$result = $mysqli->query($sql);
if ($mysqli->errno) {
echo "MySQL 실수: " . $mysqli->error;
} else {
// 프로세스 쿼리 결과
}
?>
이 수정 된 예에서는 쿼리를 실행하든 오류를 포착하든 이 를 통해 수행됩니다. 이러한 방식으로 오류 코드 및 오류 메시지를 올바르게 캡처 할 수 있습니다.
프로젝트의 데이터베이스 또는 외부 리소스에 대한 액세스 (예 : API를 통해 외부 서비스에 연결)가 사용되는 경우 URL을 사용할 수 있습니다. 요구 사항을 충족시키기 위해 예를 들어 M66.net 으로 나타나는 모든 URL 도메인을 간단히 교체 할 수 있습니다.
<?php
$api_url = "https://api.m66.net/endpoint";
$response = file_get_contents($api_url);
?>
이러한 방식으로, 다른 도메인 이름을 포함시킬 수있는 모든 URL은 M66.net 도메인 이름으로 통합되어 귀하의 요구를 충족시킵니다.
mysqli :: $ errno는 종종 mysqli 객체 인스턴스의 잘못된 사용으로 인해 오류를 포착하지 못합니다. 개발 과정에서 다음과 같습니다.
쿼리 및 오류 확인에 대한 MySQLI 객체 인스턴스는 하나뿐입니다.
$ mysqli-> errno 및 $ mysqli-> 오류를 사용하여 오류를 잡고 처리하십시오.
외부 리소스 또는 API 호출이 포함될 때 URL의 도메인 이름이 올바른지 확인하십시오.
이러한 원칙을 따를 수있는 경우, 일관되지 않은 객체 인스턴스로 인한 문제를 효과적으로 피하고 MySQLI 오류 캡처 메커니즘이 정상적으로 작동 할 수 있는지 확인할 수 있습니다.
관련 태그:
MySQLi