PHP에서는 데이터베이스 작업에 MySQLI 확장자를 사용할 때 데이터를 삽입 할 때 오류를 보는 것이 드문 일이 아닙니다. 문제를 신속하게 찾아서 해결하기 위해 MySQLI_STMT :: $ 오류 기능은 매우 유용한 도구입니다. 이 기사는 MySQLI_STMT :: $ 오류를 사용하여 데이터 삽입 실패에 대한 특정 이유를 찾아 디버깅하는 방법을 살펴 봅니다.
PHP에서 MySQLI는 MySQL 데이터베이스와 상호 작용하는 여러 가지 방법을 제공하며 MySQLI_STMT는 전처리 문을 실행하기위한 클래스입니다. 이러한 방식으로 쿼리 효율을 향상시키고 SQL 주입의 위험을 줄일 수 있습니다. 그러나 데이터 삽입 작업은 여러 가지 이유로 실패 할 수 있으며 현재 오류의 원인을 찾으려면 디버깅 방법을 사용해야합니다.
mysqli_stmt :: $ error는 마지막 전처리 명령문이 실행되지 않은 오류 메시지를 반환하는 클래스 속성입니다. 이를 통해 특정 오류 정보를 캡처하고 표시 할 수 있으며, 이는 문제를 분석하고 수정합니다.
먼저 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();
?>
위의 코드에서는 execute () 메소드 다음에 반환 값을 확인합니다. 삽입 작업이 실패하면 $ STMT-> 오류가 MySQL 오류 메시지를 반환합니다. 이 정보를 인쇄하여 실패의 특정 이유를 이해할 수 있습니다. 예를 들어, 데이터베이스가 필드 유형 불일치로 인해 "열 ''이메일 '을 위해 자르기 된 데이터"와 같은 오류 메시지를 반환하는 경우.
이런 식으로, 당신은 무엇이 잘못되었는지 직관적으로 알고 그것을 고칠 수 있습니다.
실제로 사용하면 데이터 고장을 삽입하는 데 많은 이유가있을 수 있습니다. 몇 가지 일반적인 오류와 그 이유는 다음과 같습니다.
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
데이터베이스 테이블 (예 : 사용자 이름 )의 필드에 고유 한 제약 조건이있는 경우 기존 값을 삽입하려고 할 때 고유 한 제약 조건 충돌이 발생합니다. 이때 삽입 작업은 다음과 같이 오류 메시지로 실패합니다.
Error: Duplicate entry 'john_doe' for key 'username'
열 이 Null 제약 조건을 정의하고 널 값을 삽입하려고하면 삽입이 실패합니다. 예를 들어, 사용자 이름 열이 비어 있지 않으면 빈 문자열을 삽입하거나 NULL을 삽입하려고 시도하면 오류가 발생합니다.
$username = NULL;
오류 메시지는 다음과 같습니다.
Error: Column 'username' cannot be null
물론 삽입 실패는 SQL 구문 오류에 의해 야기 될 수 있습니다. $ stmt-> 오류를 보면 특정 SQL 오류 정보를 얻을 수 있습니다.
오류 메시지를 캡처 한 후에는 반환 된 오류 메시지에 따라 그에 따라 처리 할 수 있습니다. 예를 들어:
데이터 유형이 일치하지 않으면 바인딩 매개 변수 유형이 올바른지 확인해야합니다.
고유 한 제약 조건 충돌이라면 데이터가 이미 존재하는지 확인해야 할 수도 있습니다.
Null 제약 조건 문제 인 경우 필요한 필드가 올바르게 할당되어 있는지 확인해야합니다.
mysqli_stmt :: $ 오류를 사용하면 데이터 삽입 작업에서 문제를 쉽게 캡처하고 디버깅 할 수 있습니다. 오류의 원인을 신속하게 찾아서 디버깅 시간을 절약하고 개발 효율성을 향상시키는 데 도움이됩니다. 오류 메시지를 확인하여 데이터베이스 테이블의 SQL 오류 코드 및 제한 조건 정의를 결합하면 삽입 실패를 빠르게 해결할 수 있습니다.
MySQLI_STMT :: $ 오류를 올바르게 사용하면 PHP와 MySQL 간의 상호 작용을 더 잘 디버깅하고보다 안정적이고 강력한 응용 프로그램을 구축 할 수 있습니다.