변수 LIKE 조건을 사용하여 mysqli 준비된 문으로 SELECT 쿼리 작성
사용자 입력으로 작업할 때 이를 방지하기 위한 문을 준비하는 것이 중요합니다. SQL 주입 및 데이터 무결성 보장. LIKE 조건의 수가 가변적이면 이는 어려워집니다.
문제 개요
코드 조각은 사용자 입력을 기반으로 LIKE 조건을 동적으로 생성하여 이 문제를 해결하려고 시도합니다. . 그러나 준비된 문의 매개변수 형식을 올바르게 지정하지 못합니다.
해결책
해결책은 자리 표시자가 아닌 매개변수 주위에 % 와일드카드를 배치하는 것입니다. 이렇게 하면 쿼리를 필터링하는 데 매개변수가 사용됩니다.
자세한 설명
재료 초기화:
아. OR를 사용하여 WHERE 절 표현식의 배열을 만듭니다.
b. 값의 데이터 유형을 결정합니다(이 경우 문자열).
c. 데이터 유형과 매개변수를 단일 배열로 결합합니다.
조건 준비:
a. 사용자 입력을 고유한 값의 배열로 변환합니다.
b. 각 값에 대해 LIKE 표현식을 만듭니다.
c. 데이터 유형과 와일드카드 값을 포함하도록 매개변수 배열을 업데이트합니다.
쿼리 준비:
a. 기본적인 SELECT * 쿼리로 시작하세요.
b. 조건이 있는 경우 동적 표현식과 함께 WHERE 절을 추가합니다.
매개변수 바인딩 및 실행:
a. 표시 연산자(...)를 사용하여 매개변수 배열을 준비된 명령문에 바인딩합니다.
b. 명령문을 실행하고 결과가 있으면 검색합니다.
예제 코드:
$string = "Bill N_d Dave"; $conditions = []; $parameters = ['']; foreach (array_unique(explode(' ', $string)) 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"; }
추가 참고 사항:
위 내용은 변수 LIKE 조건을 사용하여 안전한 MySQLi 준비 명령문을 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!