>  기사  >  백엔드 개발  >  MySQL LIKE 쿼리가 포함된 PHP PDO 준비 문이 결과를 반환하지 않는 이유는 무엇입니까?

MySQL LIKE 쿼리가 포함된 PHP PDO 준비 문이 결과를 반환하지 않는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-31 10:41:02952검색

Why does my PHP PDO prepared statement with MySQL LIKE query return no results?

PHP PDO 준비 문 - MySQL LIKE 쿼리

문제:
다음을 사용하여 MySQL LIKE 쿼리를 실행할 때 PHP의 PDO, 검색 결과가 없습니다.

쿼리:

<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>

PHP 코드:

<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';

$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>

해결책:
실수는 Execute() 메소드의 :searchTerm 매개변수에 할당된 값에 있습니다. 준비된 문을 사용할 때는 큰따옴표가 필요하지 않습니다.

수정된 PHP 코드:

<code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>

설명:
준비된 문은 데이터를 처리합니다. 쿼리와 별도로. 문자열 교체를 수행하지 않습니다. 따옴표는 쿼리에 값을 직접 삽입하는 경우에만 추가됩니다.

위 내용은 MySQL LIKE 쿼리가 포함된 PHP PDO 준비 문이 결과를 반환하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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