MySQLI_STMT :: $ ERROR 는 MySQLI Extension의 속성으로, 전처리 문 ( 준비 문 )에 대한 오류 정보를 얻는 데 사용됩니다. 이론적으로, mysqli_stmt :: execute () 실행이 실패하면 mysqli_stmt :: $ error 를 통해 상세한 오류 정보를 얻을 수 있어야합니다. 그러나 경우에 따라 $ 오류가 비어있을 수 있으며 오류 메시지를 반환 할 수 없습니다. 현재이 문제를 효과적으로 문제 해결하는 방법은 무엇입니까?
먼저 데이터베이스 연결이 성공했는지 확인하십시오. 데이터베이스 연결에 실패하면 SQL 문을 실행할 때 오류가 발생하며 MySQLI_STMT :: $ 오류는 특정 오류를 반환하지 않을 수 있습니다. 데이터베이스 연결이 유효한지 확인하십시오.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database_name");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
?>
데이터베이스 연결이 문제가되지 않도록하는 후에는 전처리 명령문 부분에서 오류를 계속 확인하십시오.
때때로, mysqli는 오류가 없다고 생각하기 때문에 mysqli_stmt :: $ 오류가 비어있을 수 있습니다. 추가 문제 해결을 위해 MySQLI_ERROR 및 MYSQLI_STMT :: $ errno를 사용할 수 있습니다. mysqli_error는 현재 연결 오류를 얻는 일반적인 방법이며 mysqli_stmt :: $ errno는 오류 코드를 반환합니다.
<?php
// 전처리 진술을 만듭니다
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
echo "SQL 실수: " . $mysqli->error;
} else {
$stmt->bind_param("i", $userId);
if (!$stmt->execute()) {
echo "执行실수: " . $stmt->error . " 실수码: " . $stmt->errno;
}
}
?>
이 예에서 실행이 실패하면 $ stmt-> 오류 에는 오류 메시지가 포함되며 $ stmt-> errno는 특정 오류 코드를 반환합니다.
mysqli_stmt :: $ error는 오류를 반환하지 않을 수 있습니다. 또 다른 가능한 이유는 SQL 구문 자체에 문제가 없거나 SQL 쿼리가 경우에 따라 오류를보고하지 않기 때문입니다. 더 나은 문제 해결을 위해 SQL 문을 인쇄하여 기대치를 충족하는지 확인하십시오.
<?php
$sql = "SELECT * FROM users WHERE id = ?";
echo "실행 SQL 성명: " . $sql;
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("i", $userId);
if ($stmt->execute()) {
echo "쿼리 성공";
} else {
echo "실행 실패: " . $stmt->error;
}
?>
출력 SQL 쿼리가 표시되면 문이 완료되었는지 또는 올바른 매개 변수로 스 플라이 싱되었는지 확인하십시오.
문제 해결 프로세스 중에 $ MySQLI_STMT :: $ 오류가 여전히 유효한 정보를 반환하지 않는 경우, 특히 실행중인 프로덕션 환경에서 MySQL 오류 로그를 보는 것이 좋습니다. MySQL 오류 로그에 액세스하여보다 자세한 오류 정보를 볼 수 있습니다. 일반적으로 오류 로그는 MySQL 구성 파일 My.cnf 에 지정된 log_error 경로에서 찾을 수 있습니다.
디버깅 도구 또는 개발 환경에서 var_dump 및 print_r을 사용하면 오류의 원인을 더 잘 이해하는 데 도움이 될 수 있습니다. 예를 들어, 전체 오류 객체를 인쇄하거나 MySQLI_STMT :: DEBUG () 메소드를 사용하여 자세한 디버그 정보를 볼 수 있습니다.
<?php
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->debug(); // 디버깅 정보
?>
원격 서버를 통해 데이터베이스 연결이 이루어지면 네트워크 대기 시간 또는 연결 문제의 영향을받을 수 있습니다. 이 경우 데이터베이스 서버가있는 네트워크가 안정적인지 확인하고 불안정한 연결을 유발하는 방화벽 또는 보안 설정이 있는지 확인하십시오. Ping 또는 기타 네트워크 진단 도구를 통해 연결 테스트를 시도 할 수도 있습니다.
여전히 오류 메시지를 얻을 수없는 경우, 전처리 문 ( mysqli_stmt ) 대신 mysqli_query ()를 사용해 볼 수 있습니다. mysqli_query ()는 오류 메시지를 직접 반환하여 때때로 문제를 더 명확하게 드러 낼 수 있습니다.
<?php
$query = "SELECT * FROM users WHERE id = $userId";
if (!$result = $mysqli->query($query)) {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
?>
이런 식으로, 문제가 전처리 진술의 실행에 있는지 또는 다른 곳에 있는지 여부를 더 확인할 수 있습니다.
문제를 여전히 해결할 수없는 경우 코드를 단순화하고 문제를 점차 문제 해결하려고 시도 할 수 있습니다. 간단한 쿼리를 먼저 수행 할 수 있는지 확인한 다음 오류가 발생할 때를 확인하기 위해 복잡성을 점차적으로 증가시킵니다.
MySQLI_STMT :: $ 오류가 발생하면 빈 반환을 반환하면 문제 해결 단계에는 데이터베이스 연결이 정상인지 확인, SQL 구문 확인, MySQLI_Error 및 MySQLI_STMT :: $ ERRNO를 사용하여 MySQL 오류 로그 및 기타 메소드를보기가 포함됩니다. 필요한 경우 디버깅 도구 또는 간단한 쿼리 테스트를 통해 문제의 범위를 더 좁힐 수 있습니다.
이러한 방법이 문제를 해결하고 프로젝트가 원활하게 진행되기를 바랍니다.