> 데이터 베이스 > MySQL 튜토리얼 > PHP에서 LIKE 쿼리와 함께 준비된 문을 안전하게 사용하는 방법은 무엇입니까?

PHP에서 LIKE 쿼리와 함께 준비된 문을 안전하게 사용하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-16 11:07:57
원래의
553명이 탐색했습니다.

How to Safely Use Prepared Statements with LIKE Queries in PHP?

준비된 문장과 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿