PDO 준비 명령문의 와일드카드 사용
SQL 쿼리 실행에는 특정 기준에 따라 데이터를 필터링하는 경우가 많습니다. 준비된 명령문은 SQL 주입 취약점을 방지하여 이를 달성하는 안전한 방법입니다. 그러나 준비된 명령문에 와일드카드를 사용하면 문제가 발생할 수 있습니다.
도전
이름에 "anyname"이 포함된 사용자를 검색하는 것을 목표로 하는 다음 쿼리를 고려하십시오.
SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'
준비된 문으로 이 쿼리를 실행하려고 할 때 일반적인 접근 방식은 다음과 같습니다. like:
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindParam(':name', "%" . $name . "%");
및
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'"); $stmt->bindParam(':name', $name);
작동하지 못할 수 있습니다. 이는 SQL LIKE 문에서 와일드카드를 사용하려면 준비된 문 내에서 특별한 처리가 필요하기 때문입니다.
해결책
준비된 문에서 와일드카드를 올바르게 사용하려면 바인딩 값을 활용할 수 있습니다. () 메소드 대신에 (bindParam()) 메소드를 사용합니다. 예는 다음과 같습니다.
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindValue(':name', '%' . $name . '%');
또는 BindParam()을 사용할 수도 있지만 약간 수정된 구문을 사용합니다.
$name = "%$name%"; $stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name"); $stmt->bindParam(':name', $name);
두 접근 방식 모두 와일드카드 문자가 올바르게 이스케이프되고 처리되도록 보장합니다. 데이터베이스에 의해. 이러한 방식으로 바인딩값() 또는 바인드파람()을 사용하면 준비된 문 내에서 와일드카드를 사용하여 데이터를 효과적으로 검색할 수 있어 보안과 기능을 모두 보장할 수 있습니다.
위 내용은 PDO 준비 문에 와일드카드를 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!