PHP PDO 준비 문 MySQL LIKE 쿼리: Null 결과 해결
MySQL에서 일반적인 작업에는 LIKE 절을 사용하여 데이터를 쿼리하는 작업이 포함됩니다. 와일드카드 검색. MySQL과 함께 PHP의 PDO 클래스를 사용할 때 null 결과를 피하기 위해 이러한 쿼리를 올바르게 작성하는 방법을 이해하는 것이 중요합니다.
LIKE 쿼리가 PDO 클래스를 통해 결과를 반환하지 않는 시나리오를 살펴보겠습니다. MySQL 클라이언트의 원래 쿼리는 다음과 같습니다.
<code class="sql">SELECT hs.hs_pk, hs.hs_text, hs.hs_did, hd.hd_did, hd.hd_text, hv.hv_text, hc.hc_text FROM hs LEFT JOIN hd ON hs.hs_did = hd.hd_did LEFT JOIN hd ON hd.hd_vid = hv.hv_id LEFT JOIN hc ON hd.hd_pclass = hc.hc_id WHERE hs.hs_text LIKE "%searchTerm%" LIMIT 25;</code>
이 쿼리는 LIKE 연산자를 활용하여 hs.hs_text 열의 값 내에 searchTerm이 포함된 모든 행을 찾습니다. 그러나 이 쿼리가 PHP의 PDO 클래스로 변환되면 결과가 반환되지 않습니다.
<code class="php">$sql = 'SELECT hs.hs_pk, hs.hs_text, hs.hs_did, hd.hd_did, hd.hd_text, hv.hv_text, hc.hc_text FROM hs LEFT JOIN hd ON hs.hs_did = hd.hd_did LEFT JOIN hd ON hd.hd_vid = hv.hv_id LEFT JOIN hc ON hd.hd_pclass = hc.hc_id WHERE hs.hs_text LIKE :searchTerm LIMIT 25'; $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>
PHP 코드의 문제는 WHERE 절의 searchTerm 주위에 큰따옴표가 있다는 것입니다. PHP의 준비된 문에는 값을 바인딩할 때 따옴표가 필요하지 않습니다. 따옴표는 문자열 값이 쿼리 자체에 직접 포함된 경우에만 필요합니다.
문제를 해결하려면 searchTerm 매개변수에서 큰따옴표를 제거하면 됩니다.
<code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
이 수정을 통해 PDO가 허용됩니다. 클래스를 사용하여 searchTerm 값을 쿼리에 올바르게 바인딩하면 예상한 결과가 생성됩니다.
준비된 문은 쿼리에서 데이터를 분리하여 보안과 효율성을 높입니다. 데이터베이스가 바인딩 프로세스를 처리할 수 있도록 하여 SQL 주입 취약점을 방지하고 쿼리 실행을 최적화합니다. MySQL 데이터베이스에서 효과적인 데이터 검색을 위해서는 PHP의 PDO 클래스에서 LIKE 쿼리를 올바르게 사용하는 방법을 이해하는 것이 필수적입니다.
위 내용은 MySQL LIKE 쿼리와 함께 PHP PDO 준비된 문을 사용할 때 Null 결과가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!