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 이전 버전의 경우 절차는 다음과 같습니다. 좀 더 복잡함:
예:
$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!