PHP에서 MySQLI Extension은 MySQL 데이터베이스와 상호 작용할 수있는 강력한 기능을 제공합니다. STMT_INIT 및 BIND_PARAM은 준비된 진술 및 매개 변수 바인딩에 일반적으로 사용되는 두 가지 기능입니다. 그러나 많은 개발자들은이 두 기능을 사용할 때, 특히 파라미터 유형을 바인딩 할 때 일반적인 오류가 발생하기 쉽습니다. 이 기사는 이러한 기능을 올바르게 사용하는 방법, 특히 잠재적 오류를 피하기 위해 유형 문자열의 올바른 사용을 보장하는 방법으로 뛰어납니다.
mysqli :: stmt_init 메소드는 전처리 명령문을 초기화하는 데 사용되며 쿼리 및 바인딩 매개 변수를 실행할 수있는 mysqli_stmt 객체를 반환합니다. BINT_PARAM 방법은 전처리 문 (보통 ? )에서 변수를 자리 표시 자에게 바인딩하는 데 사용됩니다. 바인딩시 각 매개 변수의 데이터 유형을 지정해야합니다.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("INSERT INTO users (name, age) VALUES (?, ?)")) {
$name = "John Doe";
$age = 25;
// 바인딩 매개 변수
$stmt->bind_param("si", $name, $age); // 's' 문자열을 나타냅니다,'i' 정수를 나타냅니다
// 실행 진술
$stmt->execute();
echo "Record inserted successfully!";
} else {
echo "Error: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
이 예에서는 BIND_PARAM을 사용하여 $ 이름 과 $ 연령 변수를 SQL 쿼리의 자리 표시 자에게 바인딩합니다. 문자열 "si" 유형은 $ 이름 이 문자열 이고 $ Age는 정수 ( i )임을 의미합니다.
bind_param 의 첫 번째 매개 변수는 각 바운드 매개 변수의 유형을 지정하는 문자열입니다. 일반적인 유형은 다음과 같습니다.
I : 정수
D : 이중 정밀 플로팅 포인트 번호 (이중)
S : String (String)
B : 이진 데이터 (Blob)
잘못된 유형 바인딩으로 인해 쿼리 실패 또는 데이터가 데이터베이스에 잘못 삽입 될 수 있으므로 각 매개 변수의 올바른 유형을 지정하는 것이 중요합니다.
$stmt->bind_param("si", $age, $name); // 실수,주문이 잘못되었습니다
이 예에서는 $ Age가 'I' 유형과 함께 사용해야하는 정수이고 $ 이름은 Type 'S' 와 함께 사용해야하는 문자열이기 때문에 바인딩 순서가 잘못되었습니다.
유형 불일치 : MySQL은 문자열 유형의 변수를 정수 유형 자리 표시 자에 바인딩하거나 정수를 문자열 유형 자리 표시 자에 바인딩하려는 경우 오류를 반환합니다. 각 매개 변수의 데이터 유형을 이해하고 bind_param 에서 올바른 유형 문자열을 사용하십시오.
bind_param을 사용하기 전에 변수 초기화 : bind_param을 사용하여 변수 바인드를 사용하기 전에 모든 변수를 초기화했는지 확인하십시오. 비 초기 변수로 인해 PHP가 오류를보고하게됩니다.
SQL 주입 방지 : 전처리 된 문 및 파라미터 바인딩을 사용하여 SQL 주입을 방지 할뿐만 아니라 데이터 유형의 정확성을 보장합니다. 이러한 방식으로 MySQL은 사용자가 입력 한 데이터가 예상 유형을 충족하지 않더라도 올바르게 처리 할 수 있습니다.
실제 개발에서는 종종 URL 및 기타 데이터를 매개 변수로 SQL 쿼리로 전달합니다. 다음은 데이터 일관성을 보장하기 위해 모든 도메인 이름을 M66.NET 으로 교체하는 URL을 처리하는 예입니다.