> 데이터 베이스 > MySQL 튜토리얼 > IN 연산자와 함께 MySQLi 준비된 문을 효과적으로 사용하는 방법은 무엇입니까?

IN 연산자와 함께 MySQLi 준비된 문을 효과적으로 사용하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-27 00:12:10
원래의
383명이 탐색했습니다.

How to Use MySQLi Prepared Statements with the IN Operator Effectively?

IN 연산자가 포함된 MySQLi 준비된 문

준비된 문은 매개변수 값을 별도로 지정할 수 있도록 하여 기존 쿼리에 비해 향상된 보안 및 성능을 제공합니다. 진술 그 자체. 그러나 IN 연산자와 함께 준비된 문을 사용하는 경우 접근 방식이 올바르지 않으면 문제가 발생할 수 있습니다.

문제

초기에서 언급했듯이 쿼리에서, 바인딩_param('s', $in_statement)을 사용하여 쉼표로 구분된 값 문자열을 준비된 문에 바인딩하면 데이터가 쿼리에 존재하더라도 결과가 나오지 않습니다. 데이터베이스.

해결책

해결책은 각 매개변수 값을 개별적으로 처리하는 데 있습니다.

  1. 번호가 매겨진 키와 전달 값을 사용하여 배열을 만듭니다. 참조를 통해 명시적으로 설명합니다.
  2. 매개변수 수를 계산하고 해당 데이터를 나타내는 적절한 수의 i 문자로 문자열을 생성합니다. type.
  3. 데이터 유형 문자열을 물음표 배열과 결합하여 준비된 명령문에 대한 매개변수 문자열을 형성합니다.
  4. 데이터 유형 문자열을 매개변수 값 배열로 이동 해제합니다.
  5. call_user_func_array를 사용하여 매개변수 값 배열을 준비된 문.

예제 코드

<?php
$lastnames = ['braun', 'piorkowski', 'mason', 'nash'];
$arParams = [];

foreach ($lastnames as $key => $value) {
    $arParams[] = &$lastnames[$key];
}

$count_params = count($arParams);
$int = str_repeat('i', $count_params);
array_unshift($arParams, $int);

$q = array_fill(0, $count_params, '?');
$params = implode(',', $q);

$data_res = $mysqli->prepare("SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN ({$params})");
call_user_func_array([$data_res, 'bind_param'], $arParams);
$data_res->execute();
$result = $data_res->get_result();

while ($data = $result->fetch_array(MYSQLI_ASSOC)) {
    // Your code here...
}

$result->free();
$data_res->close();
로그인 후 복사

이 접근 방식을 사용하면 IN 연산자를 사용하여 준비된 문에 여러 값을 올바르게 바인딩할 수 있습니다.

위 내용은 IN 연산자와 함께 MySQLi 준비된 문을 효과적으로 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿