>백엔드 개발 >PHP 튜토리얼 >문자열 배열을 MySQLi 준비된 문의 IN 절에 효율적으로 바인딩하는 방법은 무엇입니까?

문자열 배열을 MySQLi 준비된 문의 IN 절에 효율적으로 바인딩하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-24 15:50:11536검색

How to Efficiently Bind an Array of Strings to a MySQLi Prepared Statement's IN Clause?

IN 절에 대한 MySQLi 준비된 문의 문자열 배열 바인딩

데이터베이스 상호 작용 영역에서 다음과 같은 상황이 발생할 수 있습니다. MySQLi 준비된 명령문 내의 WHERE IN (?) 절에 문자열 값 배열을 바인딩해야 합니다. 이 문서에서는 기본 원칙을 자세히 살펴보고 특히 PHP 버전 8.2, 8.1 및 이전 버전에 초점을 맞춘 우아한 솔루션을 제공합니다.

PHP 8.2: 단순화된 접근 방식

The PHP 8.2에 도입된 run_query() 함수는 데이터가 채워진 배열로 준비된 명령문을 실행하는 프로세스를 간소화합니다. 예를 들면 다음과 같습니다.

$sql = "SELECT name FROM table WHERE city IN (?,?)";
$array = ["Nashville", "Knoxville"];
$result = $mysqli->execute_query($sql, $array);

동적 자리 표시자 개수와 관련된 경우 str_repeat()를 사용하여 자리 표시자를 동적으로 구성할 수 있습니다.

$array = ["Nashville", "Knoxville"];
$parameters = str_repeat("?,", count($array) - 1) . "?";
$sql = "SELECT name FROM table WHERE city IN ($parameters)";
$result = $mysqli->execute_query($sql, $array);

PHP 8.1: 직접 배열 실행

PHP 8.1 이상에서는 준비된 명령문을 배열로 직접 사용하면 명시적 바인딩이 필요하지 않습니다.

$sql = "SELECT name FROM table WHERE city IN (?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->execute(["Nashville", "Knoxville"]);
$result = $stmt->get_result();

이전 버전: 복잡성 수용

PHP 8.1 이전 버전의 경우 절차는 다음과 같습니다. 좀 더 복잡함:

  • 물음표 수가 같은 자리 표시자 문자열 만들기 str_repeat()를 사용하여 배열의 요소로 사용합니다.
  • 이 자리 표시자 문자열을 쿼리에 추가합니다.
  • 쿼리를 전통적으로 준비합니다.
  • 다음을 사용하여 바인딩_param()에 대한 유형 문자열을 구성합니다. str_repeat(), 일반적으로 문자열에 "s"를 사용합니다.
  • 인수 압축 풀기 연산자를 사용합니다. (...) 배열 값을 일괄 바인딩합니다.
  • 쿼리를 실행하고 결과를 가져옵니다.

예:

$array = ["Nashville", "Knoxville"];
$in = str_repeat("?,", count($array) - 1) . "?";
$sql = "SELECT name FROM table WHERE city IN ($in)";
$stmt = $mysqli->prepare($sql);
$types = str_repeat("s", count($array));
$stmt->bind_param($types, ...$array);
$stmt->execute();
$result = $stmt->get_result();

약간 더 장황하지만 이 코드는 다른 코드에 비해 간결한 솔루션을 제공합니다.

결론적으로, MySQLi 준비된 명령문의 IN 절에 문자열 배열을 바인딩하려면 다양한 PHP 버전에 맞게 조정된 여러 가지 방법이 필요합니다. 이 문서에 설명된 기술을 활용하면 데이터베이스 상호 작용에서 이러한 쿼리를 효과적으로 실행할 수 있습니다.

위 내용은 문자열 배열을 MySQLi 준비된 문의 IN 절에 효율적으로 바인딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.