데이터베이스 개발에 PHP를 사용할 때 MySQLI 확장은 특히 MySQLI_STMT를 사용하여 SQL 문을 준비하고 실행하는 매우 일반적인 방법입니다. 그러나 SQL 작업에 MySQLI_STMT를 사용할 때 많은 개발자가 일반적인 문제를 겪게됩니다. MySQLI_STMT :: $ 오류는 항상 비어 있습니다.
이 기사는이 문제의 일반적인 원인을 분석하고 해당 솔루션을 제공하여 개발자 가이 문제를 더 잘 디버깅하고 해결할 수 있도록 도와줍니다.
PHP에서 MySQLI_STMT :: $ 오류 속성은 문 ( STMT )과 관련된 마지막 오류 메시지를 가져 오는 데 사용됩니다. 일반적으로 SQL 문이 실행되면 오류가 발생하면 $ 오류 속성에 오류 메시지가 포함됩니다.
그러나 때로는 SQL 문이 실행 되더라도 $ 오류 속성은 빈 문자열을 반환합니다. 이것은 일반적으로 다음과 같은 이유 중 하나 때문입니다.
SQL 문에 구문 오류가 있고 오류가 올바르게 캡처되지 않으면 mysqli_stmt :: $ 오류 에 오류 메시지가 표시되지 않을 수 있습니다. 이를 확인하기 위해 MySQLI_ERROR ()를 사용하여 연결 레벨 오류를 확인할 수 있습니다.
매개 변수를 바인딩 할 때 오류가 발생하면 mysqli_stmt :: $ 오류 도 오류 메시지를 반환하지 않을 수 있습니다. Bind_param () 메소드가 구문 적으로 정확하지만 매개 변수 유형 또는 수량이 일치하지 않으면 명백한 오류가 발생하지 않을 수 있습니다. 반환 값을 확인하여이를 피할 수 있습니다.
준비 () 메소드는 SQL 쿼리를 사전 처리하는 데 사용됩니다. 일반적으로 준비가 실패했음을 나타내는 것을 거짓으로 반환하지만 경우에 따라 (예 : 데이터베이스 연결이 올바르게 설정되지 않음) MySQLI_STMT :: $ 오류 가 비어 있습니다. 준비 () 메소드의 반환 값을 확인하여 준비가 성공했는지 확인할 수 있습니다.
먼저 데이터베이스 연결이 올바른지 확인해야합니다. 데이터베이스 연결 오류로 인해 명령문 실행이 실패 할 수 있지만 MySQLI_STMT :: $ 오류에는 오류 정보가 포함되어 있지 않습니다. 쿼리가 실행되기 전에 데이터베이스에 성공적으로 연결했는지 확인하십시오.
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
데이터베이스 연결에 실패하면 $ mysqli-> connect_error를 사용하여 연결 오류에 대한 특정 정보를 볼 수 있습니다.
repary ()를 실행할 때 리턴 값이 False 인지 확인하고 $ mysqli-> error를 사용하여 mysqli_stmt :: $ 오류 에 의존하는 대신 자세한 오류 정보를 얻을 수 있습니다.
$query = "SELECT * FROM users WHERE id = ?";
$stmt = $mysqli->prepare($query);
if ($stmt === false) {
echo "진술을 준비하지 못했습니다: " . $mysqli->error;
} else {
// 후속 작업을 정상적으로 수행하십시오
}
bind_param ()을 사용할 때 매개 변수 유형이 SQL 문의 자리 표시 자와 일치하는지 확인하십시오. 예를 들어, SQL 문에 문자열 유형 자리 표시기가 포함 된 경우 Bind_Param () 의 해당 매개 변수 유형은 s 여야합니다.
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
$email = "[email protected]";
$stmt->bind_param("s", $email);
유형이 일치하지 않으면 bind_param ()은 오류를 던지지 않지만 반환 값을 확인하여 바인딩이 성공했는지 확인할 수 있습니다.
mysqli_stmt :: $ error 가 비어 있으면 mysqli_error () 및 mysqli_stmt :: error_list를 사용하여 더 많은 오류 정보를 얻을 수 있습니다.
if ($stmt->execute() === false) {
echo "실행 실패: " . $stmt->error;
print_r($stmt->error_list); // 출력 오류 목록
}
요약하면, mysqli_stmt :: $ 오류의 무효는 일반적으로 SQL 문 자체, 바인딩 매개 변수 오류 또는 데이터베이스 연결 문제와 관련이 있습니다. 이 문제가 발생하면 다음 단계를 통해 문제를 해결할 수 있습니다.
데이터베이스 연결이 성공했는지 확인하십시오.
SQL 문을 실행할 때 repay () return 값을 확인하고 $ mysqli-> 오류를 사용하여 자세한 오류를 얻으십시오.
bind_param () 의 매개 변수 유형이 SQL 문의 자리 표시 자와 일치하는지 확인하십시오.
오류 메시지가 여전히 비어 있으면 mysqli_error () 또는 stmt-> error_list를 통해 더 자세한 오류 정보를 얻을 수 있습니다.
이러한 방법을 사용하면 MySQLI_STMT :: $ 오류 의 문제를보다 효율적으로 비우는 문제를 디버그하고 해결할 수 있어야합니다.
관련 태그:
mysqli_stmt