현재 위치: > 최신 기사 목록> mysqli_stmt :: $ 오류를 통한 데이터 삽입 실패에 대한 구체적인 이유를 찾는 방법

mysqli_stmt :: $ 오류를 통한 데이터 삽입 실패에 대한 구체적인 이유를 찾는 방법

gitbox 2025-05-28

PHP에서는 데이터베이스 작업에 MySQLI 확장자를 사용할 때 데이터를 삽입 할 때 오류를 보는 것이 드문 일이 아닙니다. 문제를 신속하게 찾아서 해결하기 위해 MySQLI_STMT :: $ 오류 기능은 매우 유용한 도구입니다. 이 기사는 MySQLI_STMT :: $ 오류를 사용하여 데이터 삽입 실패에 대한 특정 이유를 찾아 디버깅하는 방법을 살펴 봅니다.

1. 소개

PHP에서 MySQLI는 MySQL 데이터베이스와 상호 작용하는 여러 가지 방법을 제공하며 MySQLI_STMT는 전처리 문을 실행하기위한 클래스입니다. 이러한 방식으로 쿼리 효율을 향상시키고 SQL 주입의 위험을 줄일 수 있습니다. 그러나 데이터 삽입 작업은 여러 가지 이유로 실패 할 수 있으며 현재 오류의 원인을 찾으려면 디버깅 방법을 사용해야합니다.

mysqli_stmt :: $ error는 마지막 전처리 명령문이 실행되지 않은 오류 메시지를 반환하는 클래스 속성입니다. 이를 통해 특정 오류 정보를 캡처하고 표시 할 수 있으며, 이는 문제를 분석하고 수정합니다.

2. mysqli_stmt :: $ 오류 로 디버그

2.1 전처리 진술

먼저 MySQLI_STMT를 사용하여 데이터를 삽입하기 위해 전처리 문을 실행하는 방법을 살펴 보겠습니다. 다음과 같이 구조가있는 데이터베이스 테이블 사용자 가 있다고 가정합니다.

 CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100)
);

새로운 데이터를 삽입하려고합니다.

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");

if ($stmt === false) {
    die("Prepare failed: " . $mysqli->error);
}

$username = "john_doe";
$email = "[email protected]";

// 바인딩 매개 변수
$stmt->bind_param("ss", $username, $email);

// 삽입 작업을 수행하십시오
if (!$stmt->execute()) {
    echo "Error: " . $stmt->error;  // 출력 오류 메시지
} else {
    echo "Record inserted successfully!";
}

$stmt->close();
$mysqli->close();
?>

2.2 캐치 오류

위의 코드에서는 execute () 메소드 다음에 반환 값을 확인합니다. 삽입 작업이 실패하면 $ STMT-> 오류가 MySQL 오류 메시지를 반환합니다. 이 정보를 인쇄하여 실패의 특정 이유를 이해할 수 있습니다. 예를 들어, 데이터베이스가 필드 유형 불일치로 인해 "열 ''이메일 '을 위해 자르기 된 데이터"와 같은 오류 메시지를 반환하는 경우.

이런 식으로, 당신은 무엇이 잘못되었는지 직관적으로 알고 그것을 고칠 수 있습니다.

3. 일반적인 삽입 오류 및 디버깅

실제로 사용하면 데이터 고장을 삽입하는 데 많은 이유가있을 수 있습니다. 몇 가지 일반적인 오류와 그 이유는 다음과 같습니다.

3.1 데이터 유형 불일치

MySQL 데이터베이스의 열에는 엄격한 데이터 유형 제한이 있습니다. 삽입 된 데이터 유형이 열에 의해 정의 된 유형과 일치하지 않으면 삽입이 실패합니다. 예를 들어, 전자 메일 열이 Varchar (100) 로 정의된다고 가정하면 100 개 이상의 문자가있는 이메일 주소를 삽입하려고하면 오류가 트리거됩니다.

 $email = "a_very_long_email_address_that_exceeds_100_characters@example.com";

현재 실행이 실패한 후 $ stmt-> 오류는 다음과 유사한 오류 메시지를 반환합니다.

 Error: Data too long for column 'email' at row 1

3.2 독특한 제약 조건 충돌

데이터베이스 테이블 (예 : 사용자 이름 )의 필드에 고유 한 제약 조건이있는 경우 기존 값을 삽입하려고 할 때 고유 한 제약 조건 충돌이 발생합니다. 이때 삽입 작업은 다음과 같이 오류 메시지로 실패합니다.

 Error: Duplicate entry 'john_doe' for key 'username'

3.3 널 값 제약 조건

이 Null 제약 조건을 정의하고 값을 삽입하려고하면 삽입이 실패합니다. 예를 들어, 사용자 이름 열이 비어 있지 않으면 빈 문자열을 삽입하거나 NULL을 삽입하려고 시도하면 오류가 발생합니다.

 $username = NULL;

오류 메시지는 다음과 같습니다.

 Error: Column 'username' cannot be null

3.4 SQL 오류

물론 삽입 실패는 SQL 구문 오류에 의해 야기 될 수 있습니다. $ stmt-> 오류를 보면 특정 SQL 오류 정보를 얻을 수 있습니다.

4. mysqli_stmt :: $ 오류 에서 오류 메시지를 처리합니다

오류 메시지를 캡처 한 후에는 반환 된 오류 메시지에 따라 그에 따라 처리 할 수 ​​있습니다. 예를 들어:

  • 데이터 유형이 일치하지 않으면 바인딩 매개 변수 유형이 올바른지 확인해야합니다.

  • 고유 한 제약 조건 충돌이라면 데이터가 이미 존재하는지 확인해야 할 수도 있습니다.

  • Null 제약 조건 문제 인 경우 필요한 필드가 올바르게 할당되어 있는지 확인해야합니다.

5. 결론

mysqli_stmt :: $ 오류를 사용하면 데이터 삽입 작업에서 문제를 쉽게 캡처하고 디버깅 할 수 있습니다. 오류의 원인을 신속하게 찾아서 디버깅 시간을 절약하고 개발 효율성을 향상시키는 데 도움이됩니다. 오류 메시지를 확인하여 데이터베이스 테이블의 SQL 오류 코드 및 제한 조건 정의를 결합하면 삽입 실패를 빠르게 해결할 수 있습니다.

MySQLI_STMT :: $ 오류를 올바르게 사용하면 PHP와 MySQL 간의 상호 작용을 더 잘 디버깅하고보다 안정적이고 강력한 응용 프로그램을 구축 할 수 있습니다.