내 로컬/개발 환경에서는 MySQLi 쿼리가 제대로 실행됩니다. 하지만 웹 호스팅 환경에 업로드하면 다음 오류가 발생합니다.
<인용문>치명적인 오류: 객체가 아닌 객체에 대해 멤버 함수 바인딩_param()을 호출합니다...
인용문>코드는 다음과 같습니다.
전역 $mysqli; $stmt = $mysqli->prepare("선택 ID, 설명 FROM tbl_page_answer_category WHERE cur_own_id = ?"); $stmt->bind_param('i', $cur_id); $stmt->execute(); $stmt->bind_result($uid, $desc);
제 쿼리를 확인하기 위해 제어판에서 phpMyAdmin을 통해 쿼리를 실행해 보았는데 결과는 정상이었습니다.
간단히
설명
때때로 mysqli 코드는 매개변수 1이 mysqli_result일 것으로 예상하는 mysqli_fetch_assoc()과 같은 오류를 생성하지만 실제로는 부울 값을 얻습니다..., 바인딩_param()의 멤버 함수 호출... 또는 이와 유사한 오류가 발생합니다. 오류도 없지만 쿼리가 여전히 작동하지 않습니다. 이는 쿼리를 실행하지 못했음을 의미합니다.
쿼리가 실패할 때마다 MySQL은 이유를 설명하는 오류 메시지를 표시합니다. 이전 버전의 PHP에서는 이러한 오류 메시지가 PHP로 전달되지 않았으며 위에서 언급한 모호한 오류 메시지만 표시되었습니다. 따라서 MySQL 오류를 사용자에게 보고하도록 PHP 및 mysqli를 구성하는 것이 매우 중요합니다. 오류 메시지가 나타나면 오류를 수정할 수 있습니다.
MySQL에서 오류 메시지를 받는 방법
먼저 모든 환경에서 항상 mysqli 연결 앞에 다음 코드 줄을 추가하세요.
으아악이후에는 모든 MySQL 오류가 PHP 예외로 변환됩니다. 포착되지 않은 예외는 PHP 치명적인 오류를 발생시킵니다. 따라서 MySQL 오류가 발생하면 일반 PHP 오류가 발생합니다. 그러면 오류의 원인을 즉시 알 수 있습니다. 그리고 스택 추적을 통해 오류가 발생한 정확한 위치를 찾을 수 있습니다.
PHP에서 오류 정보를 얻는 방법
개발서버에서는 화면에 오류 메시지가 나타나는지 확인하고, 프로덕션 서버에서는 오류 로그를 확인하세요. 자세한 내용은 PHP 오류 보고에 대한 내 기사를 참조하세요.
AJAX 호출을 할 때 개발 서버에서 개발자 도구(F12)를 열고 네트워크 탭으로 전환하세요. 그런 다음 결과를 보고 싶은 요청을 하면 네트워크 탭에 표시됩니다. 그것을 클릭하고 응답 탭으로 전환하십시오. 거기에서 정확한 출력을 볼 수 있습니다. 프로덕션 서버에서 오류 로그를 확인하세요.
표시된 오류 메시지를 처리하는 방법
먼저 문제 쿼리를 찾아야 합니다. 오류 메시지에는 오류가 발생한 파일 이름과 줄 번호가 포함되어 있습니다. 간단한 코드의 경우 이것으로 충분하지만 코드에서 함수나 클래스를 사용하는 경우 문제 쿼리를 찾기 위해 스택을 추적해야 할 수도 있습니다.
오류 메시지가 표시된 후 내용을 읽고 이해해야 합니다. 이는 너무 당연하게 들릴 수도 있지만, 학습자는 오류 메시지가 단순한 경고 표시가 아니라 실제로 문제에 대한 자세한 설명을 포함하고 있다는 사실을 간과하는 경우가 많습니다. 오류 메시지를 읽고 문제를 해결하기만 하면 됩니다.
오류 메시지를 이해하지 못하시면 Google에서 검색해 보세요. 결과를 탐색할 때 해결책을 직접 제시하기보다는 오류를 설명하는 답변을 선택하세요. 특정 상황에서는 솔루션이 작동하지 않을 수 있지만 설명을 통해 문제를 이해하고 스스로 해결할 수 있습니다.
오보도 믿어야 합니다. 오류 메시지에 토큰 수가 바인드 변수 수와 일치하지 않는다고 표시되면 그게 전부입니다. 테이블이나 열이 누락된 경우에도 마찬가지입니다. 선택할 때 그것이 자신의 잘못이든 잘못된 정보의 잘못이든 항상 전자를 고수하십시오. 다시 말하지만, 이것은 거만하게 들릴 수도 있지만 이 사이트에 있는 수백 개의 질문은 이 조언이 얼마나 유용한지 입증합니다.
기본 디버깅
쿼리가 작동하지 않는 것 같으면 다음 네 가지 이유가 있을 수 있습니다.