mysqli_fetch_assoc ()는 다음 변수 / 멤버 함수 호출 bind_param () 오류를 예상합니다. 실제 mysql 오류를 수정하는 방법은 무엇입니까?
내 로컬 / 개발 환경에서 MySQLi 쿼리가 수행되고 있습니다. 그러나 웹 호스트 환경에 업로드하면 다음 오류가 발생합니다.
치명적 오류 : 비 수업의 bind_param () 멤버 함수 호출 ...
다음은 코드입니다.
global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param('i', $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);
내 쿼리를 확인하기 위해 phpMyAdmin을 통해 실행 쿼리를 실행하려고합니다.
때때로 mysqli 코드가 mysqli_fetch_assoc() expects parameter
, Call to a member function bind_param()
또는 이와 유사한 오류를 생성합니다 . 또는 오류 없이도 쿼리가 모두 동일하게 작동하지 않습니다. 쿼리를 실행하지 의미합니다.
쿼리가 실패 할 때마다 MySQL 에는 이유를 설명하는 오류 메시지가 표시됩니다 . 안타깝게도 기본적으로 오류는 PHP로 전송되지 않은 오류 메시지 만 있습니다. 따라서 MySQL 오류를보고하도록 PHP와 mysqli를 구성하는 것이 매우 중요합니다. 오류 메시지가 표시되면 문제를 해결하는 것이 좋습니다.
mysqli에서 오류 메시지를 얻는 방법
우선, mysqli가 모든 환경 에서 연결하기 전에 항상 다음 줄을 사용 하십시오.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
그 후 모든 MySQL 오류는 PHP 예외로 전송됩니다. 잡히지 않은 예외는 PHP 치명적인 오류를 만듭니다. 따라서 MySQL 오류의 경우 일반적인 PHP 오류가 발생합니다. 그럼 오류 원인을 즉시 알 수 있습니다. 스택 추적을 통해 오류가 해결 지점에서 실행할 수 있습니다.
다양한 환경에서 PHP를 구성하는 방법
여기에 내 글의 요지입니다 PHP 오류보고 :
개발과 라이브 서버에 오류를보고하는 것은 달라야은. 개발 서버에서는 화면에 오류를 표시하는 것이지만 라이브 서버에서는 오류 메시지를 대신 기록해야합니다. 따라서 서버의 오류 로그에서 수 있습니다.
해당 구성 옵션을 다음 값으로 설정해야합니다.
개발 서버에서
error_reporting
E_ALL
값으로 설정해야 합니다.log_errors
1로 설정해야합니다 (개발 PC 회의 로그를 보유하는 것이 편리합니다).display_errors
1로 설정해야합니다.
거기 서버에서
error_reporting
E_ALL
값으로 설정해야 합니다.log_errors
1로 설정해야합니다.display_errors
0으로 설정해야합니다.
실제로 사용하는 방법?
그냥 모든 코드를 제거하는 수동으로 오류를 검사 , 모든 or die()
, if ($result)
등. 즉시 상호 데이터베이스 작용 코드가 작성됩니다.
$stmt = $this->con->prepare("INSERT INTO table(name, quantity) VALUES (?,?)");
$stmt->bind_param("si", $name, $quantity);
$stmt->execute();
또, 주변에 어떤 조건없이 . 오류가 발생하면 코드에서 다른 오류로 처리됩니다. 예를 들어, 개발 PC에서는 화면에만 표시되고 라이브 사이트에서는 프로그래머 용으로 기록되는 반면 사용자의 편의를 위해 오류 래퍼를 사용할 수있는 mysqli에 대한 주제가 아닌 다른 이야기입니다. ,하지만 위에 링크 된 가이드에 대해 읽을 수 있습니다.
표시되는 오류 메시지로 수행 할 작업
오류 메시지를받은 후에는 읽고 이해해야합니다. 너무 당연하게 들리지만 학습자들은 종종 오류 메시지의 극도의 유용성을 간과합니다. 대부분의 경우 문제를 매우 간단하게 설명합니다. 특정 테이블이 존재하지 않는다고 표시 맞춤법, 오타, 대소 문자, 자격 증명 등을 확인해야합니다. 또는 SQL 구문에 오류가 표시되는 경우 SQL을 검사해야합니다. 그리고 문제 지점은 오류 메시지에 인용 된 쿼리 부분 바로 앞에 있습니다.
오류 메시지를 이해하지 못하는 경우 Google에 시도해 사용. 그리고 결과를 탐색 할 때 솔직하게 해결책을 제시하기보다는 오류 마사지를 설명하는 답변을 고수하십시오. 특정 경우에 솔루션이 작동하지 않도록 이해하고 직접 수 있습니다.
또한 오류 메시지를 신뢰 해야합니다. 토큰의 수가 바인딩 된 변수의 수와 일치하지 않는다고 말하면 일치합니다. 없는 테이블이나 열도 마찬가지입니다. 자신의 실수 든 오류 메시지 든 선택이 주어지면 항상 전자를 고수하십시오. 다시 말하지만,이 사이트에 대한 수백 개의 질문은이 조언이 매우 유용하다는 것을 증명합니다.
오류보고와 관련하여 절대하지 말아야 할 일 목록
- 오류 억제 연산자 (
@
)를 사용하지 마십시오 ! 프로그래머가 오류 메시지를 읽을 수 없으므로 오류를 수정할 수 없습니다. die()
또는echo
또는 다른 기능을 사용하여 무조건 화면에 오류 메시지를 인쇄 하지 마십시오 . PHP는 자체적으로보고하고 환경에 따라 올바른 방식으로 수행합니다.- 쿼리 결과를 수동으로 테스트하는 조건을 추가하지 마십시오 (예
if($result)
:). 쿼리가 실패하고 이미 오류 예외가 발생하거나 괜찮 았고 테스트 할 것이 없습니다. try..catch
오류 메시지를 에코하기 위해 연산자를 사용하지 마십시오 . 이 연산자는 트랜잭션 롤백과 같은 오류 처리를 수행하는 데 사용해야합니다. 그러나 오류를보고하는 데만 사용해서는 안됩니다. 위에서 배운 것처럼 PHP는 이미 올바른 방법으로 할 수 있습니다.
추신
때때로 오류는 없지만 결과도 없습니다. 그러면 기준과 일치하는 데이터가 데이터베이스에 없습니다 . 이 경우이 사실을 인정해야합니다. 당신이 데이터를 맹세 할 수 있더라도 기준은 괜찮습니다. 그렇지 않습니다. 다시 확인해야합니다. 이 문제에 도움이 될 수있는 문서 인 How to debug database interactions를 가지고 있습니다. PDO 용으로 작성되었지만 원칙은 동일합니다. 이 지침을 단계별로 따르고 문제를 해결하거나 Stack Overflow에 대한 답변 가능한 질문이 있습니다.
'IT' 카테고리의 다른 글
"true"== true가 JavaScript에서 false를 표시하는 이유는 무엇입니까? (0) | 2020.09.25 |
---|---|
pip로 편집 가능한 패키지를 제거하는 방법 (-e로 설치됨) (0) | 2020.09.25 |
Android 6.0에서 Bluetooth 저에너지 검색을 위해 위치를 활성화해야합니다. (0) | 2020.09.25 |
Eclipse 용을 작성하는 방법은 무엇입니까? (0) | 2020.09.25 |
관리되지 않는 dll을 관리되는 C # dll에 포함 (0) | 2020.09.25 |