>  기사  >  백엔드 개발  >  MySQL LIKE 쿼리와 함께 PHP PDO 준비된 문을 사용할 때 Null 결과가 나타나는 이유는 무엇입니까?

MySQL LIKE 쿼리와 함께 PHP PDO 준비된 문을 사용할 때 Null 결과가 나타나는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-30 19:11:30345검색

Why Am I Getting Null Results When Using PHP PDO Prepared Statements with MySQL LIKE Queries?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.