PHP 개발에서 SQL 쿼리의 오류 디버깅은 일반적으로 지루한 작업입니다. 특히 쿼리 문이 복잡하고 여러 조건과 조항이 포함 된 경우. MySQLI_STMT :: $ ERROR 속성은 SQL 쿼리의 오류를 신속하게 발견하고 해결하는 매우 효과적인 도구, 특히 조항 의 일반적인 오류를 제공합니다.
먼저, MySQLI_STMT :: $ ERROR 는 MySQLI_STMT 클래스의 속성으로, 마지막 SQL 문이 실행될 때 생성 된 오류 정보를 저장합니다. 일반적으로 mysqli_stmt :: $ 오류는 오류 문자열을 반환합니다. SQL 쿼리 실행에 문제가없는 경우 속성은 빈 문자열을 반환합니다.
이로 인해 MySQLI_STMT :: $ 오류는 특히 조항이 있는 곳에서 복합체를 디버깅 할 때 SQL 오류를 포착하는 데 중요한 도구가됩니다.
WHER 절에서 일반적인 오류는 다음과 같습니다.
잘못된 열 또는 테이블 이름
잘못된 비교 연산자 (예 : == 대신 == )
잘못된 구문 (예 : 누락 된 브래킷)
부적절한 데이터 유형 비교 (예 : 문자열과 숫자 비교)
이러한 오류는 일반적으로 특히 SQL 쿼리 문이 길어질 때 직관적으로 쉽게 감지되지 않습니다.
다음은 SQL 쿼리를 디버그하고 mysqli_stmt :: $ error를 통해 조항 오류를 찾는 단계는 다음과 같습니다.
먼저 MySQLI 데이터베이스 연결을 작성하고 SQL 문을 준비하십시오.
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
// 전처리 진술
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND age > ?");
if ($stmt === false) {
die("진술을 준비하지 못했습니다: " . $mysqli->error);
}
?>
그런 다음 쿼리 매개 변수를 바인딩하고 명령문을 실행합니다. 여기서 우리는 불법 연령 값을 전달하는 것과 같은 WHERE 절로 오류에서 의도적으로 연령 필드를 만들 수 있습니다.
<?php
$username = "john_doe";
$age = "twenty"; // 여기서 우리는 고의적으로 나이를 끈으로 설정합니다,숫자가 아닙니다
$stmt->bind_param("si", $username, $age);
$stmt->execute();
?>
SQL 쿼리를 실행 한 후 MySQLI_STMT :: $ 오류를 통해 SQL 문이 성공적으로 실행되는지 확인할 수 있습니다. 오류가 발생하면 자세한 오류 메시지가 반환되어 문제를 신속하게 찾을 수 있습니다.
<?php
if ($stmt->error) {
echo "SQL 실수: " . $stmt->error;
} else {
echo "쿼리 성공";
}
?>
이 시점에서 $ stmt-> 오류는 다음과 유사한 오류 메시지를 출력합니다.
SQL 실수: Unknown column 'twenty' in 'where clause'
오류 메시지에서 들어오는 20 문자열이 법적 번호가 아니기 때문에 WHERE 절의 연령 필드에서 오류가 발생했음을 알 수 있습니다.
mysqli_stmt :: $ 오류를 사용하는 것 외에도 몇 가지 추가 디버깅 단계를 수행 할 수 있습니다.
완전한 SQL 쿼리 인쇄 : 때로는 SQL 쿼리를 수동으로 보는 것도 효과적인 디버깅 방법입니다. MySQLI는 출력 바운드 쿼리 문을 직접 지원하지 않지만 수동으로 쿼리 문자열을 빌드하여 출력 할 수 있습니다.
MySQL 오류 로그보기 : 데이터베이스 서버가 지원하는 경우 일반적으로 SQL 오류에 대한 자세한 내용이 포함 된 MySQL 오류 로그를 볼 수도 있습니다.
MySQLI_STMT :: $ 오류 속성을 통해 PHP 개발자는 SQL 쿼리를 실행할 때 클로스 가있는 오류를 빠르게 잡아서 찾을 수 있습니다. 이것은 복잡한 쿼리 문에 특히 중요합니다. 합리적인 오류 처리 및 디버깅 기술을 결합하면 디버깅 효율성을 효과적으로 향상시키고 일반적인 SQL 오류를 피할 수 있습니다.