복붙노트

[SQL] PDO와 함께 LIKE에 대한 명명 된 매개 변수를 사용하여

SQL

PDO와 함께 LIKE에 대한 명명 된 매개 변수를 사용하여

나는 LIKE를 사용하여 내 데이터베이스에 이름 필드를 검색하려합니다. 이 같은 hand`으로 SQL을 '공예 경우 :

$query = "SELECT * \n"
        . "FROM `help_article` \n"
        . "WHERE `name` LIKE '%how%'\n"
        . "";
$sql = $db->prepare($query);
$sql->setFetchMode(PDO::FETCH_ASSOC);
$sql->execute();

그 다음은 '방법'에 대한 관련성이 높은 결과를 보여줍니다. 그러나, 나는 준비된 문으로 바꿀 때

$query = "SELECT * \n"
        . "FROM `help_article` \n"
        . "WHERE `name` LIKE '%:term%'\n"
        . "";
$sql->execute(array(":term" => $_GET["search"]));
$sql->setFetchMode(PDO::FETCH_ASSOC);
$sql->execute();

나는 항상 0 결과를 얻고있다.

내가 무엇을 잘못하고 있지? 나는 내 코드의 다른 장소에서 준비된 문을 사용하고 그들은 잘 작동합니다.

해결법

  1. ==============================

    1.바운드 : 자리는 작은 따옴표로 묶어야합니다되지 않습니다. 그 방법은 해석하지만, 원시 문자열로 취급되지 않습니다.

    바운드 : 자리는 작은 따옴표로 묶어야합니다되지 않습니다. 그 방법은 해석하지만, 원시 문자열로 취급되지 않습니다.

    당신이 좋아하는 패턴으로 하나를 사용할 때, 값으로 %에 함께 통과 :

    $query = "SELECT * 
              FROM `help_article` 
              WHERE `name` LIKE :term ";
    
    $sql->execute(array(":term" => "%" . $_GET["search"] . "%"));
    

    아, 그리고 실제로 먼저 (addcslashes) 여기에 입력 된 문자열을 청소해야합니다. 사용자가 매개 변수 내에서 불필요한 %의 문자를 제공하는 경우, 다음 그들은 LIKE 일치 패턴의 일부가됩니다. 용어 매개 변수 문자열 값으로 전달되며, 모든 %는 LIKE 절에 대한 해당 문자열이 될 자리에서 S :의 전체는 것을 기억하십시오.

  2. from https://stackoverflow.com/questions/7252283/using-named-parameters-with-pdo-for-like by cc-by-sa and MIT license