현재 위치: > 최신 기사 목록> mysqli :: stmt_init and repay ()의 표준 사용의 예

mysqli :: stmt_init and repay ()의 표준 사용의 예

M66 2025-05-29

준비된 진술은 PHP에서 MySQLI 확장을 사용할 때 데이터 보안을 보장하고 효율성을 향상시키는 중요한 수단입니다. 이 기사는 mysqli :: stmt_init 함수의 올바른 사용법을 자세히 소개하고 () 메소드를 준비 하고 실제 예제와 함께 분석합니다.

1. mysqli :: stmt_init 란 무엇입니까?

mysqli :: stmt_init는 mysqli가 빈 mysqli_stmt (statement) 객체를 초기화하기 위해 제공하는 메소드입니다. 그런 다음이 객체를 사용하여 SQL 문을 전제로 처리 할 수 ​​있습니다.

구문은 다음과 같습니다.

 mysqli_stmt mysqli::stmt_init ( void )

일반적으로 SQL 문을 준비하기 위해 repay () 메소드와 함께 사용됩니다.

2. 준비 () 메소드는 무엇입니까?

준비 () 메소드는 나중에 실행되고 매개 변수를 사용하여 바인딩 될 수있는 SQL 문을 준비하는 데 사용됩니다. 이것은 SQL 주입 공격을 효과적으로 방지 할 수 있습니다.

구문은 다음과 같습니다.

 bool mysqli_stmt::prepare ( string $query )

3. 사용 단계에 대한 자세한 설명

다음은 mysqli :: stmt_initrepay ()를 사용하는 표준 프로세스입니다.

  1. 데이터베이스에 연결하십시오

  2. 전처리 명령문 객체를 초기화하십시오

  3. repay ()를 사용하여 준비 명세서

  4. 매개 변수 바인드 (있는 경우)

  5. 실행 진술

  6. 결과 가져 오기 (쿼리 문인 경우)

  7. 진술과 연결을 닫습니다

4. 자세한 코드 예제

ID , 사용자 이름 , 이메일과 같은 필드가있는 사용자 테이블 사용자 가 있다고 가정합니다. 사용자 이름에 따라 사용자의 이메일 주소를 쿼리하려고합니다.

 <?php
// 첫 번째 단계:데이터베이스 연결을 설정하십시오
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");

// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

// 2 단계:전처리 명령문 객체를 초기화하십시오
$stmt = $mysqli->stmt_init();

// 3 단계:준비하다 SQL 성명
$sql = "SELECT email FROM users WHERE username = ?";
if (!$stmt->prepare($sql)) {
    die("SQL 전처리가 실패했습니다: " . $stmt->error);
}

// 4 단계:바인딩 매개 변수
$username = "testuser";
$stmt->bind_param("s", $username);  // "s" 문자열 유형을 나타냅니다

// 5 단계:执行성명
$stmt->execute();

// 6 단계:결과를 바인딩하고 데이터를 얻으십시오
$stmt->bind_result($email);
if ($stmt->fetch()) {
    echo "사용자 이메일입니다: " . $email;
} else {
    echo "이 사용자는 찾을 수 없었습니다。";
}

// 7 단계:关闭성명与连接
$stmt->close();
$mysqli->close();
?>

5. 자주 묻는 질문과 예방 조치

1. 왜 ready ()로 SQL을 직접 쓰지 않겠습니까?

Query () 메소드를 사용하여 직접 SQL을 실행할 수 있지만 SQL 주입 공격에 취약합니다. 바인딩 준비 () 및 매개 변수는이 문제를 효과적으로 방지 할 수 있습니다.

2. stmt_init ()repay () 의 차이점은 무엇입니까?

stmt_init ()는 빈 명령문 객체를 생성하고 준비 () SQL 템플릿을로드합니다. 또한 stmt_init ()를 건너 뛰고 $ mysqli-> repay ()를 직접 호출하여 초기화 및 준비를 한 단계로 완료 할 수 있습니다.

3. 문장을 재사용 할 수 있습니까?

예, SQL 템플릿 구조가 일관된 한 명령문 객체를 재사용 할 수 있고 바운드 매개 변수를 변경할 수 있습니다.

6. 예 : Post Form을 사용하여 데이터를 삽입합니다

다음 예제는 양식을 통해 데이터를 제출하고 데이터베이스에 안전하게 삽입하는 방법을 보여줍니다.

 <?php
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST["username"] ?? "";
    $email = $_POST["email"] ?? "";

    $stmt = $mysqli->stmt_init();
    if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {
        $stmt->bind_param("ss", $username, $email);
        if ($stmt->execute()) {
            echo "사용자 등록이 성공적으로!";
        } else {
            echo "실행 실패:" . $stmt->error;
        }
        $stmt->close();
    }
}

$mysqli->close();
?>
<form method="POST" action="https://m66.net/register.php">
    사용자 이름:<input type="text" name="username" required><br>
    우편:<input type="email" name="email" required><br>
    <input type="submit" value="등록하다">
</form>

7. 요약

mysqli :: stmt_init and repay () 의 조합은 PHP에 대한 강력한 데이터베이스 보안 메커니즘을 제공합니다. 파라미터 결합은 SQL 주입을 방지 할뿐만 아니라 실행 효율을 향상시킵니다. 실제 개발에서는 항상 전처리 명세서를 사용하여 데이터베이스를 작동하는 것이 좋습니다.

mysqli에서 bind_param ()bind_result () 의 고급 사용법에 대해 계속 배우고 싶으십니까?