PHP를 사용하여 MySQL 데이터베이스를 작동 할 때 MySQLI 확장은 풍부한 전처리 명세서 (준비 문) 지원을 제공하여 SQL 주입 공격을 효과적으로 방지하고 데이터베이스 작업의 보안 및 효율성을 향상시킬 수 있습니다. 이 기사는 mysqli :: stmt_init 메소드를 사용하여 명령문 객체를 초기화하고 객체를 통해 SQL 문을 실행하는 방법에 중점을 둡니다.
mysqli :: stmt_init ()는 빈 명령문 개체 ( mysqli_stmt )를 초기화하는 데 사용되는 mysqli 클래스의 메소드입니다. 이 객체는 repay () 메소드를 호출하여 SQL 쿼리 문에 바인딩되고 Bind_param () , execute () 및 기타 작업 메소드를 호출합니다.
기본 구문은 다음과 같습니다.
$stmt = $mysqli->stmt_init();
여기서 $ mysqli 는 데이터베이스에 연결된 MySQLI 객체입니다.
다음은 STMT_INIT 초기화 명령문을 사용하고 SQL 쿼리를 실행하는 완전한 PHP 예입니다.
<?php
// 데이터베이스 연결
$mysqli = new mysqli("localhost", "username", "password", "database");
// 연결을 확인하십시오
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
// 명령문 객체를 초기화하십시오
$stmt = $mysqli->stmt_init();
// 전처리 SQL 성명
if ($stmt->prepare("SELECT name, email FROM users WHERE id = ?")) {
// 바인딩 매개 변수
$id = 1;
$stmt->bind_param("i", $id);
// 执行성명
$stmt->execute();
// 바인딩 결과 변수
$stmt->bind_result($name, $email);
// 쿼리 결과를 얻으십시오
while ($stmt->fetch()) {
echo "사용자 이름: $name, 우편: $email<br>";
}
// 关闭성명
$stmt->close();
} else {
echo "SQL 전처리失败: " . $stmt->error;
}
// 연결을 닫으십시오
$mysqli->close();
?>
stmt_init ()를 호출 한 후에는 repay () 메소드를 사용하여 실제로 SQL 문을 바인딩해야합니다.
예를 들어 Bind_param () 의 유형 매개 변수는 정수 를 나타내고 "S"는 문자열을 나타내므로 올바르게 설정해야합니다.
명령문 개체를 사용한 후 $ stmt-> close () 에게 전화하여 리소스를 확보하십시오.
명령문 준비에 $ mysqli-> repary ()를 직접 사용할 수 있지만 stmt_init ()는 문을 재사용 할 수 있는지 확인 해야하는지 또는 저수준 인터페이스를 사용하는 것과 같은 더 유용한 것과 같이보다 자세한 컨트롤을 제공합니다.