찾다

 >  Q&A  >  본문

mysqli 문제를 어떻게 처리하나요? 예를 들어, mysqli_fetch_array()에서 오류가 발생합니다. 매개변수 #1은 mysqli_result 유형이어야 합니다.

<p>내 로컬/개발 환경에서는 MySQLi 쿼리가 제대로 실행됩니다. 하지만 웹 호스팅 환경에 업로드하면 다음 오류가 발생합니다. </p> <인용문> <p>치명적인 오류: 객체가 아닌 객체에 대해 멤버 함수 바인딩_param()을 호출합니다...</p> </인용문> <p>코드는 다음과 같습니다. </p> <pre class="brush:php;toolbar:false;">전역 $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);</pre> <p>제 쿼리를 확인하기 위해 제어판에서 phpMyAdmin을 통해 쿼리를 실행해 보았는데 결과는 정상이었습니다. </p>
P粉426906369P粉426906369498일 전471

모든 응답(1)나는 대답할 것이다

  • P粉252116587

    P粉2521165872023-07-25 15:41:15

    간단히

    1. mysqli 연결 코드에는 항상 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)를 사용하고 항상 PHP 오류를 확인하세요.
    2. 항상 SQL 쿼리의 모든 PHP 변수를 물음표로 바꾸고 준비된 문을 사용하여 쿼리를 실행하세요. 이는 다양한 구문 오류를 방지하는 데 도움이 됩니다.

    설명

    때때로 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)를 열고 네트워크 탭으로 전환하세요. 그런 다음 결과를 보고 싶은 요청을 하면 네트워크 탭에 표시됩니다. 그것을 클릭하고 응답 탭으로 전환하십시오. 거기에서 정확한 출력을 볼 수 있습니다. 프로덕션 서버에서 오류 로그를 확인하세요.


    표시된 오류 메시지를 처리하는 방법

    먼저 문제 쿼리를 찾아야 합니다. 오류 메시지에는 오류가 발생한 파일 이름과 줄 번호가 포함되어 있습니다. 간단한 코드의 경우 이것으로 충분하지만 코드에서 함수나 클래스를 사용하는 경우 문제 쿼리를 찾기 위해 스택을 추적해야 할 수도 있습니다.

    오류 메시지가 표시된 후 내용을 읽고 이해해야 합니다. 이는 너무 당연하게 들릴 수도 있지만, 학습자는 오류 메시지가 단순한 경고 표시가 아니라 실제로 문제에 대한 자세한 설명을 포함하고 있다는 사실을 간과하는 경우가 많습니다. 오류 메시지를 읽고 문제를 해결하기만 하면 됩니다.

    • 테이블이 존재하지 않는다는 오류 메시지가 나타나면 철자, 오타, 대소문자를 확인해야 합니다. 또한, PHP 스크립트가 올바른 데이터베이스에 연결되어 있는지 확인해야 합니다.
    • 오류 메시지에 SQL 구문 오류가 표시되면 SQL 문을 확인해야 합니다. 문제는 오류 메시지에서 참조된 쿼리 부분 이전에 발생해야 합니다.

    오류 메시지를 이해하지 못하시면 Google에서 검색해 보세요. 결과를 탐색할 때 해결책을 직접 제시하기보다는 오류를 설명하는 답변을 선택하세요. 특정 상황에서는 솔루션이 작동하지 않을 수 있지만 설명을 통해 문제를 이해하고 스스로 해결할 수 있습니다.

    오보도 믿어야 합니다. 오류 메시지에 토큰 수가 바인드 변수 수와 일치하지 않는다고 표시되면 그게 전부입니다. 테이블이나 열이 누락된 경우에도 마찬가지입니다. 선택할 때 그것이 자신의 잘못이든 잘못된 정보의 잘못이든 항상 전자를 고수하십시오. 다시 말하지만, 이것은 거만하게 들릴 수도 있지만 이 사이트에 있는 수백 개의 질문은 이 조언이 얼마나 유용한지 입증합니다.

    기본 디버깅

    쿼리가 작동하지 않는 것 같으면 다음 네 가지 이유가 있을 수 있습니다.

    1. 실행 중 오류가 발생했습니다. 위에서 이미 설명했습니다.
    2. 프로그램 로직 오류로 인해 SQL이 전혀 실행되지 않았습니다. 코드가 쿼리가 실행되는 지점에 도달하도록 임시 디버깅 출력을 추가합니다.
    3. SQL이 성공적으로 실행되었지만 결과가 잘못된 데이터베이스에 표시되었습니다. 다시 한 번 확인해 주세요.
    4. 입력한 데이터가 데이터베이스와 일치하지 않습니다. 확인해볼 수 있는 몇 가지 제안 사항이 있습니다

    회신하다
    0
  • 취소회신하다