현재 위치: > 최신 기사 목록> STMT_INIT로 저장된 절차를 실행하는 방법

STMT_INIT로 저장된 절차를 실행하는 방법

M66 2025-05-31

PHP에서 MySQLI Extension은 데이터베이스와 상호 작용하는 여러 가지 방법을 제공합니다. 그 중에서 MySQLI :: STMT_INIT 함수는 준비된 문을 초기화하는 데 사용할 수있는 매우 유용한 도구입니다. 이 기능을 사용하면 저장 프로 시저를보다 안전하고 효율적으로 실행하고 반환 된 결과를 처리 할 수 ​​있습니다. 이 기사는 mysqli :: stmt_init를 사용하여 저장된 절차 및 프로세스 결과를 실행하는 방법을 자세히 설명합니다.

1. 준비

먼저 데이터베이스가 저장 프로 시저를 작성했는지 확인하십시오. get_user_info 라는 저장된 절차가 있다고 가정하여 사용자의 ID에 따라 사용자 이름과 이메일을 반환합니다. 저장 프로 시저의 SQL 코드는 다음과 같습니다.

 DELIMITER $$

CREATE PROCEDURE get_user_info(IN user_id INT)
BEGIN
    SELECT name, email FROM users WHERE id = user_id;
END$$

DELIMITER ;

2. PHP 코드 구현

PHP에서는 mysqli :: stmt_init를 사용하여 명령문 객체를 초기화하고 해당 객체를 통해 저장 프로 시저를 실행합니다.

1 단계 : 데이터베이스 연결을 만듭니다

먼저 MySQLI 확장자를 사용하여 데이터베이스에 연결해야합니다.

 <?php
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'test_db';

$mysqli = new mysqli($host, $username, $password, $database);

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

2 단계 : stmt_init을 사용하여 명령문 객체를 초기화합니다

mysqli :: stmt_init 함수는 mysqli_stmt 객체를 초기화하는 데 사용됩니다. 이 예에서는 get_user_info 저장 프로 시저를 실행하기 위해 명령문 객체를 초기화합니다.

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

// 초기화가 성공했는지 확인하십시오
if (!$stmt) {
    die('진술을 초기화 할 수 없습니다: ' . $mysqli->error);
}
?>

3 단계 : 저장된 절차를 준비하고 실행합니다

명령문 객체가 초기화되면 준비 메소드를 사용하여 저장된 프로 시저의 SQL 문을 준비 할 수 있습니다. 저장 프로 시저를 실행할 때 매개 변수를 전달합니다 (이 예에서는 사용자 ID).

 <?php
// 저장된 절차를 준비하십시오
$query = "CALL get_user_info(?)";
if (!$stmt->prepare($query)) {
    die('저장된 절차 준비가 실패했습니다: ' . $stmt->error);
}

// 바인딩 매개 변수
$user_id = 1;  // 사용자를 쿼리하고 싶다고 가정합니다 ID ~을 위한 1 정보
$stmt->bind_param("i", $user_id); // "i" 표현하다 integer 유형

// 저장된 절차를 실행하십시오
if (!$stmt->execute()) {
    die('저장된 프로 시저 실행이 실패했습니다: ' . $stmt->error);
}
?>

4 단계 : 결과를 얻고 처리하십시오

저장된 절차가 실행 된 후에는 결과 세트가 일반적으로 반환됩니다. 여기서는 get_result 방법을 통해 실행 결과를 얻고 처리해야합니다.

 <?php
// 쿼리 결과를 얻으십시오
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    // 각 데이터 라인을 출력합니다
    while ($row = $result->fetch_assoc()) {
        echo "이름: " . $row['name'] . "<br>";
        echo "이메일: " . $row['email'] . "<br>";
    }
} else {
    echo "관련 기록이 발견되지 않았습니다";
}
?>

5 단계 : 진술 및 데이터베이스 연결을 닫습니다

마지막으로 명령문 객체 및 데이터베이스 연결을 닫는 것을 잊지 마십시오.

 <?php
$stmt->close();
$mysqli->close();
?>

3. 저장된 절차에서 오류를 처리합니다

생산 환경에서는 적절한 오류 처리를 보장하는 것이 중요합니다. 준비 , 실행get_result 메소드의 반환 값을 확인하여 오류를 포착 할 수 있습니다. 또한 오류가 발생하면 시도가 발생할 때 Try-Catch 문을 사용하여 프로그램이 우아하게 종료 될 수 있도록 예외를 포착 할 수 있습니다.

4. 요약

mysqli :: stmt_init 함수를 통해 저장된 프로 시저를 안전하고 효과적으로 실행하고 매개 변수 바인딩 및 결과 세트를 통해 기능을 얻을 수 있습니다. 준비된 명령문을 사용하면 SQL 주입을 방지 할뿐만 아니라 실행 효율도 향상됩니다. 이 기사가 MySQLI 확장을 더 잘 이해하고 사용하여 저장된 절차를 작동하도록 도와 줄 수 있기를 바랍니다.