>  기사  >  백엔드 개발  >  PDO 준비 문이 LIKE 쿼리로 결과를 반환하지 못하는 이유는 무엇입니까?

PDO 준비 문이 LIKE 쿼리로 결과를 반환하지 못하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-01 12:50:29454검색

Why Does PDO Prepared Statement Fail to Return Results with LIKE Query?

PHP의 PDO 준비 문: MySQL LIKE 쿼리 관련 문제

MySQL을 사용하는 PHP의 PDO 클래스는 매개변수화된 쿼리로 SQL 문을 실행하기 위한 메커니즘을 제공합니다. , 보안과 성능을 향상시킵니다. 그러나 사용자는 LIKE 쿼리를 사용할 때 어려움을 겪을 수 있습니다.

문제: PDO 준비된 문이 LIKE 쿼리로 결과를 반환하지 않습니다

다음과 유사한 쿼리를 실행하려고 할 때 PDO 사용:

<code class="mysql">SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"</code>

결과가 반환되지 않을 수도 있습니다.

해결책: 올바른 매개변수화

문제는 잘못된 매개변수화에 있습니다. 검색어의 PHP에서 준비된 문은 다른 구문이 필요한 명명된 자리 표시자를 사용합니다. LIKE 쿼리에 대한 올바른 매개 변수화는 다음과 같습니다.

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

설명:

준비된 문은 쿼리에서 데이터를 분리하고 자리 표시자를 사용합니다. 따라서 검색어를 큰따옴표로 묶거나 문자열 연결을 수행할 필요가 없습니다.

기타 일반적인 실수:

<code class="php">WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));  // Incorrect</code>
  • 이 접근 방식은 불필요한 큰따옴표를 추가하므로 올바르지 않습니다.
<code class="php">WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));  // Incorrect</code>
  • CONCAT를 사용하여 쿼리 내에서 검색어를 감싸는 것은 매개변수화에 필요하지 않습니다.

사용 올바른 매개변수화를 사용하면 PHP에서 PDO 준비 문을 사용하여 LIKE 쿼리를 성공적으로 실행할 수 있습니다.

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

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