현재 위치: > 최신 기사 목록> MySQLI_STMT :: $ 오류를 사용할 때 가장 일반적인 오류가 가장 일반적인 오류입니다

MySQLI_STMT :: $ 오류를 사용할 때 가장 일반적인 오류가 가장 일반적인 오류입니다

gitbox 2025-05-28

PHP에서 MySQLI_STMT :: $ 오류는 준비 문을 실행하는 동안 발생할 수있는 오류 정보를 얻는 데 사용됩니다. 이 기능은 매우 유용하지만 많은 개발자가 실제 응용 프로그램에서 몇 가지 일반적인 실수를 겪을 수 있습니다. 이 기사는이 5 가지 일반적인 실수와 피하는 방법을 다룰 것입니다.

1. 잘못된 데이터베이스 연결

SQL 쿼리를 실행하기 전에 데이터베이스 연결이 유효한지 확인해야합니다. 문이 실행되기 전에 데이터베이스 연결이 실패하면 MySQLI_STMT :: $ 오류는 오류 메시지를 올바르게 반환하지 않습니다.

피하는 방법 :

mysqli_connect () 또는 new mysqli ()를 사용하여 데이터베이스 연결을 올바르게 연결하고 쿼리를 실행하기 전에 연결이 성공했는지 확인하십시오. 간단한 예는 다음과 같습니다.

 <?php
// 데이터베이스에 연결하십시오
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');

// 연결을 확인하십시오
if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

// 전처리 진술을 만듭니다
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if ($stmt === false) {
    die("전처리 성명서 생성이 실패했습니다: " . $mysqli->error);
}
?>

이렇게하면 연결이 실패하면 올바른 오류 메시지를 캡처 할 수 있습니다.

2. 매개 변수는 올바르게 바인딩되지 않습니다

전처리 문을 사용하는 경우 MySQLI_STMT :: $ 오류는 매개 변수를 올바르게 바인딩하지 않으면 예상되는 오류를 반환하지 않을 수 있습니다. 이 오류는 종종 bind_param ()을 사용하고 잘못된 매개 변수 유형 또는 수량을 전달할 때 발생합니다.

피하는 방법 :

Bind_Param () 로 전달되는 매개 변수 유형이 SQL 쿼리의 자리 표시 자와 일치하는지 확인하십시오. 예를 들어, 문자열은 S 에 사용되며 정수는 I 에 사용되며 이중 정제 플로팅 지점 숫자는 d 에 사용됩니다.

 <?php
// 우리가 사용하고 싶다고 가정합니다 ID 쿼리를 수행하십시오
$id = 1;
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);  // 여기에 유형이 있습니다 "i" 정수를 나타냅니다
if ($stmt->execute()) {
    // 성공적으로 실행되었습니다
    $result = $stmt->get_result();
} else {
    // 오류 처리
    echo "오류 메시지: " . $stmt->error;
}
?>

이러한 방식으로 Bind_Param () 유형 일치가 그러한 오류를 피할 수 있는지 확인합니다.

3. SQL 구문 오류

또 다른 일반적인 오류는 SQL 쿼리 자체에 구문 문제가있어 실행 실패를 유발할 수 있으며 MySQLI_STMT :: $ 오류가 오류를 잡는 데 도움이 될 수 있다는 것입니다.

피하는 방법 :

SQL 쿼리를 작성할 때 구문이 올바른지 확인하십시오. PHP의 mysqli_error () 또는 mysqli_stmt :: $ 오류를 사용하여 디버그를 돕습니다. 일반적인 SQL 오류 예는 다음과 같습니다.

 <?php
$stmt = $mysqli->prepare("SELEC * FROM users WHERE id = ?");
if ($stmt === false) {
    die("진술을 준비하지 못했습니다: " . $mysqli->error);
}
$stmt->bind_param("i", $id);
$stmt->execute();
?>

여기서 오류는 Select가 SELEC 으로 작성되어 쿼리가 실패한다는 것입니다. SQL 문에 오타가 없는지 확인하고 mysqli_error ()를 사용하여 구문 오류를 포착하십시오.

4. 잘못된 필드 유형

데이터베이스의 필드 유형이 쿼리의 데이터 유형과 일치하지 않으면 mysqli_stmt :: $ 오류가 관련 오류 메시지를 반환합니다.

피하는 방법 :

삽입 또는 쿼리가 데이터베이스 테이블에 정의 된 필드 유형과 일치하는지 확인하십시오. 테이블의 필드가 int 유형이고 문자열을 전달하면 오류가 발생할 수 있습니다.

 <?php
$id = "string_instead_of_int";
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);  // 여기에서는 정수 유형을 통과해야합니다 $id
$stmt->execute();
?>

바운드 매개 변수가 데이터베이스 필드 유형과 일치하는지 확인하십시오.

5. execute () 의 반환 값은 확인되지 않습니다

mysqli_stmt :: $ 오류가 항상 모든 오류를 자동으로 포착하는 것은 아니므로 execute () 의 리턴 값을 확인하지 않으면 일부 오류가 무시 될 수 있습니다.

피하는 방법 :

명령문을 실행 한 후 항상 execute () 메소드의 반환 값을 확인하십시오. 반환 값이 False 인 경우 실행이 실패했음을 의미합니다. mysqli_stmt :: $ 오류를 사용하여 자세한 오류 정보를 얻을 수 있습니다.

 <?php
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
if (!$stmt->execute()) {
    echo "실행 오류: " . $stmt->error;
}
?>

이런 식으로, 오류가 즉시 잡히지 않더라도 문제를 적시에 발견하고 수정할 수 있는지 확인할 수 있습니다.


요약

MySQLI_STMT :: $ ERROR 는 MySQL 전처리 명령문 오류를 포착하는 PHP의 강력한 도구이지만 올바르게 사용되도록하는 경우 잘못된 데이터베이스 연결, 바인딩 매개 변수의 불일치, 필드 유형의 불일치 및 검사되지 않은 value () 와 같은 일반적인 오류를 피해야합니다. 이러한 모범 사례를 따르면 이러한 문제를 효과적으로 피할 수있어 응용 프로그램을보다 강력하게 만들 수 있습니다.