PHP를 사용하여 MySQL 데이터베이스를 작동 할 때 MySQLI 확장자는 SQL 문을보다 안전하고 구조적으로 실행할 수있는 객체 지향 인터페이스를 제공합니다. 특히 준비된 진술을 실행할 때 mysqli :: stmt_init 및 fetch () 는 두 가지 매우 중요한 기능입니다.
이 기사는 mysqli :: stmt_init ()를 사용하여 명령문 개체를 초기화하고 fetch () 메소드를 결합하여 데이터베이스에서 데이터를 안전하고 효율적으로 얻는 방법을 자세히 소개합니다.
mysqli :: stmt_init ()는 명령문 개체 ( mysqli_stmt )를 초기화하는 데 사용되는 MySQLI 클래스의 메소드입니다. 그런 다음이 객체는 repay () 메소드를 통해 SQL 문을 준비 할 수 있습니다. 이것의 장점은 진술을 재사용하고 매개 변수를 바인딩하여 코드의 보안 및 효율성을 향상시킬 수 있다는 것입니다.
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$stmt = $mysqli->stmt_init();
stmt_init () 로 명령문 객체를 작성한 후 repay ()를 사용하여 쿼리 문을 준비하고 bind_param ()을 사용하여 매개 변수를 바인딩하십시오.
$query = "SELECT id, name, email FROM users WHERE status = ?";
if ($stmt->prepare($query)) {
$status = 'active';
$stmt->bind_param("s", $status);
$stmt->execute();
}
팁 : bind_param 의 첫 번째 매개 변수 "s"는 매개 변수 유형이 문자열 ( 문자열 )임을 의미합니다.
명령문을 실행 한 후 Bind_Result ()를 사용하여 쿼리 결과 열을 변수에 바인딩 한 다음 Fetch () 메소드를 사용하여 데이터 행을 행으로 추출 할 수 있습니다.
$stmt->bind_result($id, $name, $email);
while ($stmt->fetch()) {
echo "사용자ID: $id<br>";
echo "사용자名: $name<br>";
echo "우편: $email<br><br>";
}
다음은 완전한 PHP 샘플 프로그램입니다.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$stmt = $mysqli->stmt_init();
$query = "SELECT id, name, email FROM users WHERE status = ?";
if ($stmt->prepare($query)) {
$status = 'active';
$stmt->bind_param("s", $status);
$stmt->execute();
$stmt->bind_result($id, $name, $email);
echo "<h2>活跃사용자列表:</h2>";
while ($stmt->fetch()) {
echo "<div>";
echo "<strong>ID:</strong> $id<br>";
echo "<strong>이름:</strong> $name<br>";
echo "<strong>우편:</strong> <a href='mailto:$email'>$email</a><br>";
echo "<a href='https://m66.net/user/profile.php?id=$id'>세부 사항을 확인하십시오</a>";
echo "</div><hr>";
}
$stmt->close();
} else {
echo "SQL 전처리가 실패했습니다: " . $stmt->error;
}
$mysqli->close();
?>