>백엔드 개발 >PHP 튜토리얼 >준비된 명령문을 사용하여 MySQLi에서 동적 LIKE 조건 SELECT 쿼리를 작성하는 방법은 무엇입니까?

준비된 명령문을 사용하여 MySQLi에서 동적 LIKE 조건 SELECT 쿼리를 작성하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-06 10:48:11508검색

How to Build a Dynamic LIKE Condition SELECT Query in MySQLi Using Prepared Statements?

동적 LIKE 조건을 사용하여 MySQLi 준비된 명령문으로 SELECT 쿼리 작성

문제

사용자는 다양한 수의 검색어를 입력할 수 있으며 해당 쿼리는 해당 용어를 기반으로 동적으로 작성되어야 합니다. 목표는 이 동적 입력을 수용하는 준비된 문을 만드는 것입니다.

해결책

쿼리 표현식 구성:

각 검색어를 값 바인딩을 위한 자리 표시자가 있는 LIKE 조건 (%?).

예:

$construct .= "name LIKE %?%";

바인딩 매개변수:

데이터 유형과 입력 값을 패킹합니다. splat 연산자를 사용하여 하나의 배열로 (...).

예:

$parameters = ['sss', '%Bill%', '%N_d%', '%Dave%'];

문 준비 및 실행:

문 준비 동적 WHERE 절을 사용하여 바인딩합니다. 매개변수.

$stmt = $mysqli->prepare('SELECT * FROM info WHERE ' . implode(' OR ', $conditions));
$stmt->bind_param(...$parameters);
$stmt->execute();

결과 검색:

쿼리를 실행하고 필요에 따라 결과를 가져옵니다.

$result = $stmt->get_result();
foreach ($result as $row) {
    echo '<div>' . $row['name'] . '</div>\n'; 
}

수정된 예 코드:

<?php
$string = "my name";
$search_exploded = explode(" ", $string);
$num = count($search_exploded);

$conditions = [];
$parameters = [''];
foreach (array_unique($search_exploded) as $value) {
    $conditions[] = "name LIKE ?";
    $parameters[0] .= 's';
    $parameters[] = "%{$value}%";
}

$query = "SELECT * FROM info";
if ($conditions) {
    $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions));
    $stmt->bind_param(...$parameters);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query($query);
}
foreach ($result as $row) {
    echo '<div>' . $row['name'] . '</div>\n'; 
}

?>

위 내용은 준비된 명령문을 사용하여 MySQLi에서 동적 LIKE 조건 SELECT 쿼리를 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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