집 >데이터 베이스 >MySQL 튜토리얼 >PHP에서 LIKE 쿼리와 함께 준비된 문을 안전하게 사용하는 방법은 무엇입니까?
준비된 문장과 LIKE 쿼리 이해
PHP에서는 LIKE 쿼리에 대해 준비된 문을 사용할 때 잠재적인 오류를 방지하기 위해 문자열 매개변수를 주의 깊게 처리해야 합니다. 준비된 명령문은 자리 표시자(?)를 활용하여 성능을 향상시키면서 SQL 주입을 방지합니다.
사례 1: '%{$var}%'를 사용하여 사용자 이름 일치
다음 코드:
<code class="language-php">$sql = 'SELECT * FROM `users` WHERE username LIKE \'%{?}%\' ';</code>준비된 SQL 문에 자리 표시자 ?가 제대로 정의되지 않았기 때문에
에서 오류가 발생합니다.
사례 2: %{?}%를 사용하여 사용자 이름 일치
다음 코드:
<code class="language-php">$sql = 'SELECT * FROM `users` WHERE username LIKE %{?}% ';</code>
도 구문이 잘못되어 실패합니다. 백분율 기호(%)는 준비된 문에서 자리 표시자로 직접 사용할 수 없습니다.
해결책: 연결된 LIKE 변수를 사용하세요.
이 문제를 해결하려면 연결된 LIKE 변수를 사용하세요.
<code class="language-php">$likeVar = "%" . $yourParam . "%"; $stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ?"); $stmt->bind_param("s", $likeVar); $stmt->execute();</code>
이 예에서 $likeVar는 사용자 입력 $yourParam과 백분율 기호를 결합하여 구성됩니다. 그런 다음 LIKE 조건은 매개변수 바인딩 중에 연결된 문자열 $likeVar에 바인딩되는 ? 자리 표시자를 사용합니다.
이 접근 방식을 사용하면 준비된 문에서 백분율 기호가 구문 요소가 아닌 리터럴 문자로 처리됩니다. 또한 $likeVar에 올바른 와일드카드 문자가 포함되도록 하여 대소문자를 구분하지 않고 검색할 수 있습니다.
위 내용은 PHP에서 LIKE 쿼리와 함께 준비된 문을 안전하게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!