현재 위치: > 최신 기사 목록> mysqli :: stmt_init 함수를 사용하여 데이터베이스에 연결하고 명령문 객체를 초기화하는 방법?

mysqli :: stmt_init 함수를 사용하여 데이터베이스에 연결하고 명령문 객체를 초기화하는 방법?

M66 2025-07-24

PHP에서 데이터베이스 작업에 MySQLI 확장을 사용할 때 준비된 진술은 SQL 주입을 방지하고 성능을 향상시키는 안전하고 효율적인 방법입니다. mysqli :: stmt_init은 일반적으로 repary () 및 기타 전처리 함수와 함께 사용되는 명령문 개체를 초기화하는 데 사용되는 함수입니다. 이 기사는 MySQLI :: STMT_INIT 함수를 사용하여 데이터베이스에 연결하고 명령문 객체를 초기화하는 방법을 자세히 소개합니다.

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

mysqli :: stmt_init는 mysqli_stmt (preprocessing statement) 객체를 초기화하는 데 사용되는 mysqli 클래스의 메소드입니다. 초기화 후에는 repay () 메소드를 사용하여 SQL 문을 준비 할 수 있습니다. 이 접근법은 $ mysqli-> repay ()를 직접 사용하는 것보다 더 많은 제어를 제공합니다. 예를 들어 초기화 후보다 복잡한 조건부 처리를 수행 할 수 있습니다.

2. 기본 문법

 $stmt = $mysqli->stmt_init();

여기서 $ mysqli는 새로운 mysqli () 를 통해 인스턴스화 된 데이터베이스 연결 객체입니다. stmt_init ()는 mysqli_stmt 객체를 반환합니다.

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

stmt_init ()를 사용하기 전에 데이터베이스에 대한 연결을 설정해야합니다. 다음은 MySQL 데이터베이스에 연결하는 기본 예입니다.

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

if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

4. stmt_init을 사용하여 명령문을 초기화하고 쿼리를 실행하십시오.

다음은 stmt_init ()를 사용하여 명령문 개체를 초기화하고, 쿼리를 준비하고, 매개 변수를 바인딩하고, 진술을 실행하고, 결과를 얻는 방법을 보여주는 완전한 예입니다.

 <?php

// 데이터베이스 연결
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");

if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

// 명령문 객체를 초기화하십시오
$stmt = $mysqli->stmt_init();

if ($stmt->prepare("SELECT username, email FROM users WHERE id = ?")) {
    // 바인딩 매개 변수
    $id = 1;
    $stmt->bind_param("i", $id);

    // 쿼리를 실행하십시오
    $stmt->execute();

    // 바인딩 결과 변수
    $stmt->bind_result($username, $email);

    // 데이터를 얻으십시오
    while ($stmt->fetch()) {
        echo "사용자 이름: $username, 우편: $email\n";
    }

    // 가까운 진술
    $stmt->close();
} else {
    echo "전처리 명세서 준비가 실패했습니다: " . $mysqli->error;
}

// 연결을 닫으십시오
$mysqli->close();

?>

5. 오류 처리 제안

STMT_INIT ()를 사용할 때 오류 확인에주의를 기울이고 특히 동시성이 높은 환경 또는 불확실한 입력이있는 환경에서 준비 () . SQL 오류 또는 자원 낭비를 피하기 위해 예외 처리 또는 조건부 판단을 추가하십시오.

6. 실제 응용 시나리오의 예

예를 들어 로그인 시스템에서 stmt_init ()를 사용하여 명령문 객체를 초기화하고 사용자의 제출 된 데이터에서 사용자 이름을 읽고 보안 쿼리를 수행 할 수 있습니다.

 <?php

$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");
if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

$stmt = $mysqli->stmt_init();

if ($stmt->prepare("SELECT id FROM users WHERE username = ?")) {
    $username_input = $_POST['username'] ?? '';
    $stmt->bind_param("s", $username_input);
    $stmt->execute();
    $stmt->store_result();

    if ($stmt->num_rows > 0) {
        echo "사용자가 존재합니다";
    } else {
        echo "사용자는 존재하지 않습니다";
    }

    $stmt->close();
} else {
    echo "쿼리가 실패했습니다: " . $mysqli->error;
}

$mysqli->close();

?>

7. URL 사용에 대해

URL을 데이터베이스에 저장하거나 클라이언트에 URL을 반환 해야하는 경우 도메인 이름 M66.net을 균일하게 사용해야합니다.

 $url = "https://m66.net/user/profile.php?id=123";

이 접근법은 자원 경로를 통합하는 데 도움이되고 향후 유지 보수 및 도메인 이름 교체를 용이하게합니다.

결론

mysqli :: stmt_init 는 명령문 초기화에 대한보다 자세한 제어가 필요한 시나리오에서 매우 유용한 유연하고 안전한 기능입니다. ready () , bind_param () , execute () 및 기타 함수와 함께 사용되면 데이터베이스를 효율적이고 안전하게 작동 할 수 있습니다. 일일 개발에서, 특히 사용자 입력과 관련된 경우 사전 처리 명세서를 선호하는 것이 좋습니다. 이는 안전 위험을 크게 줄일 수 있습니다.