현재 위치: > 최신 기사 목록> stmt_init을 사용할 때 동적 매개 변수 수를 지원하는 방법

stmt_init을 사용할 때 동적 매개 변수 수를 지원하는 방법

M66 2025-05-18

PHP에서 MySQLI Extension은 데이터베이스와 상호 작용하는보다 안전하고 유연한 방법을 제공합니다. mysqli :: stmt_init 함수는 준비 문을 초기화하는 데 매우 유용한 기능이며 일반적으로 매개 변수와 함께 SQL 쿼리를 수행하는 데 사용됩니다. 이 기사는 MySQLI :: STMT_INIT를 사용하여 동적 매개 변수 및 유연한 프로세스 쿼리 매개 변수를 지원하는 방법을 살펴 봅니다.

1. 배경

mysqli :: stmt_init 함수는 SQL 쿼리 문에 대한 전처리 명령문 객체를 작성하는 데 사용될 수 있으며, 이는 여러 매개 변수를 안전하게 바인딩하고 쿼리를 실행할 수 있습니다. 사전 컴파일 쿼리 명령문으로 SQL 주입의 위험을 줄이고 특히 매개 변수화 쿼리에 적합합니다.

2. 준비

먼저 데이터베이스에 연결되어 있는지 확인하십시오. 다음은 데이터베이스 연결의 예입니다.

 <?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// 연결을 만듭니다
$conn = new mysqli($servername, $username, $password, $dbname);

// 연결을 확인하십시오
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

3. 동적 매개 변수를 지원합니다

경우에 따라 쿼리 문의 매개 변수 수를 미리 결정할 수 없습니다. 예를 들어, 쿼리를 동적으로 빌드하고 들어오는 데이터에 따라 필요한 쿼리 매개 변수 수를 결정할 수 있습니다.

다음과 같이 필터링 할 여러 매개 변수를 동적으로 전달할 수있는 쿼리가 있다고 가정합니다.

 SELECT * FROM users WHERE name = ? AND age = ? AND city = ?

이름 , 연령도시 가 조건부 필터링 필드임을 알 수 있으며 실제 요구에 따라 쿼리 조건을 동적으로 전달할 수 있기를 바랍니다.

쿼리 및 바인딩 매개 변수를 동적으로 빌드합니다

  1. 쿼리 명령문 구축 : 먼저 간단한 조건을 통해 SQL 문을 동적으로 구축합니다.

  2. 바인드 매개 변수 : 그런 다음 콜 _user_func_array를 사용하여 동적 매개 변수를 쿼리에 바인딩합니다.

다음은 구현의 예입니다.

 <?php
// 1. 짓다 SQL 쿼리 문
$baseQuery = "SELECT * FROM users WHERE ";
$conditions = [];
$params = [];
$types = "";

// 동적 조건 어레이,그것을 가정합니다 POST 얻다
$filters = [
    'name' => 'John',
    'age' => 25,
    'city' => 'New York'
];

// 根据传入的过滤条件动态生成쿼리 문
foreach ($filters as $key => $value) {
    $conditions[] = "$key = ?";
    $params[] = $value;
    $types .= "s"; // 모든 조건이 문자열 유형이라고 가정합니다
}

$query = $baseQuery . implode(" AND ", $conditions);

// 2. 사용 stmt_init 쿼리 초기화
$stmt = $conn->stmt_init();
if ($stmt->prepare($query)) {
    // 3. 동적 바인딩 파라미터
    $stmt->bind_param($types, ...$params);
    
    // 4. 쿼리를 실행하십시오
    $stmt->execute();
    $result = $stmt->get_result();
    
    // 5. 얻다结果
    while ($row = $result->fetch_assoc()) {
        print_r($row);
    }
    
    // 6. 가까운 진술
    $stmt->close();
} else {
    echo "Error: " . $stmt->error;
}
?>

4. 코드 설명

  • 동적으로 빌드 쿼리 : $ 필터 배열을 기반으로 SQL 쿼리 문을 동적으로 빌드하여 필요할 때만 조건을 추가합니다.

  • 동적 바인딩 매개 변수 : bind_param ()을 사용하여 쿼리 매개 변수를 바인딩합니다. Call_user_Func_Array를 통해 매개 변수를 전달하므로 여러 쿼리 매개 변수를 처리 할 수 ​​있습니다.

  • 쿼리 실행 : 마지막으로 execute ()를 통해 쿼리를 실행하고 get_result ()를 사용하여 쿼리 결과를 얻습니다.

5. 요약

위의 방법을 통해 mysqli :: stmt_init 함수에서 동적 매개 변수의 지원을 구현할 수 있으며 쿼리 매개 변수를 유연하게 처리 할 수도 있습니다. 동적 매개 변수화 된 쿼리는 쿼리의 유연성을 증가시킬뿐만 아니라 SQL 주입을 효과적으로 방지하고 응용 프로그램의 보안을 보장합니다.


참고 : 실제 프로젝트에서 특히 동적 쿼리를 처리 할 때 사용자 입력의 모든 매개 변수가 엄격하게 검증되고 소독되어 있는지 확인하십시오. SQL 문을 직접 스 플라이 싱하지 않고 항상 준비 문 및 바인딩 매개 변수를 사용하여 쿼리를 실행하십시오.