당신이 얻을 때마다 ...
"경고 : mysqli_fetch_object ()는 매개 변수 1이 mysqli_result, boolean이 될 것으로 예상합니다"
... 쿼리에 문제가 있기 때문일 수 있습니다. prepare()
또는 query()
힘 리턴 FALSE
(부울)하지만,이 일반 오류 메시지가 단서의 방법으로 많이 당신을 떠나지 않습니다. 검색어에 어떤 문제가 있는지 어떻게 알 수 있습니까? 당신은 질문 !
우선, 오류보고가 켜져 있고 표시되어 있는지 확인하십시오. 여는 <?php
태그 바로 다음에 파일 상단에 다음 두 줄을 추가하십시오 .
error_reporting(E_ALL);
ini_set('display_errors', 1);
오류보고가 php.ini에 설정되어 있으면 걱정할 필요가 없습니다. 오류를 정상적으로 처리하고 사용자에게 문제의 원인을 밝히지 마십시오. 대중에게 진정한 원인을 밝히는 것은 사이트와 서버에 해를 입히고 자하는 사람들에게 금으로 새겨진 초대 일 수 있습니다. 브라우저에 오류를 보내지 않으려면 항상 웹 서버 오류 로그를 모니터 할 수 있습니다. 로그 위치는 서버마다 다릅니다. 예를 들어 Ubuntu에서 오류 로그는 일반적으로에 있습니다 /var/log/apache2/error.log
. Linux 환경에서 오류 로그를 검사하는 경우 tail -f /path/to/log
콘솔 창을 사용 하여 실시간으로 발생하는 오류를 확인하거나 오류를 확인할 수 있습니다.
데이터베이스 오류 및 쿼리에 오류 검사를 추가하면 표준 오류보고가 제곱되면 진행중인 문제에 대한 자세한 정보를 얻을 수 있습니다. 열 이름이 잘못된이 예를 살펴보십시오. 먼저 일반적인 치명적 오류 메시지를 반환하는 코드는 다음과 같습니다.
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
오류는 일반적이며 진행중인 문제를 해결하는 데 큰 도움이되지 않습니다.
두 줄 이상의 코드를 사용하면 문제를 즉시 해결하는 데 사용할 수있는 매우 자세한 정보를 얻을 수 있습니다 . prepare()
진술의 진실성을 점검하고 그것이 좋은 경우에는 구속력을 갖고 집행 할 수 있습니다.
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
// handle error
}
문제가 있으면 오류 메시지를 내뿜어 문제로 바로 이동할 수 있습니다. 이 경우 foo
테이블에 열 이 없으므로 문제를 해결하는 것이 쉽지 않습니다.
원하는 경우 함수 또는 클래스에이 검사를 포함하고 앞에서 언급 한대로 오류를 정상적으로 처리하여 확장 할 수 있습니다.