[php] LIKE 문을 사용하여 PDO 매개 변수화 된 쿼리를 어떻게 생성합니까?

내 시도는 다음과 같습니다.

$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');

$query->execute(array('value'));

while ($results = $query->fetch())
{
    echo $results['column'];
}



답변

내가 게시 한 직후에 그것을 알아 냈습니다.

$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));

while ($results = $query->fetch())
{
    echo $results['column'];
}


답변

명명 된 매개 변수를 사용 하는 경우 MySQL 데이터베이스에 부분 일치 를 사용하는 방법은 다음 LIKE과 같습니다.%

WHERE column_name LIKE CONCAT ( '%', : dangerousstring, '%')

여기서 명명 된 매개 변수는 :dangerousstring입니다.

즉, %사용자 입력이 아닌 분리 된 자체 쿼리에서 명시 적으로 이스케이프 처리되지 않은 기호를 사용합니다.

편집 : Oracle 데이터베이스의 연결 구문 은 연결 연산자 : ||를 사용하므로 간단히 다음 과 같이됩니다.

WHERE column_name LIKE '%'|| : 위험한 문자열 || '%'

@bobince 언급 그러나주의 사항이 있습니다 여기에 있음 :

어려움은
당신이 문자 그대로 허용 할 경우 제공 %또는 _이 와일드 카드 역할을하지 않고, 검색 문자열에서 문자를.

그래서 그것은 like와 parameterization을 결합 할 때주의해야 할 것입니다.


답변

$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->bindValue(1, "%$value%", PDO::PARAM_STR);
$query->execute();

if (!$query->rowCount() == 0)
{
    while ($results = $query->fetch())
    {
        echo $results['column'] . "<br />\n";
    }
}
else
{
    echo 'Nothing found';
}


답변

이것을 시도 할 수도 있습니다. 비슷한 문제에 직면했지만 연구 결과를 얻었습니다.

$query = $pdo_connection->prepare('SELECT * FROM table WHERE column LIKE :search');

$stmt= $pdo_connection->prepare($query);

$stmt->execute(array(':search' => '%'.$search_term.'%'));

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

print_r($result);


답변

이것은 작동합니다 :

search `table` where `column` like concat('%', :column, '%')


답변

나는 PHP 망상 에서 이것을 얻었다

$search = "%$search%";
$stmt  = $pdo->prepare("SELECT * FROM table WHERE name LIKE ?");
$stmt->execute([$search]);
$data = $stmt->fetchAll();

저에게는 매우 간단합니다. 그가 말했듯이 쿼리로 보내기 전에 “전체 리터럴을 먼저 준비”해야합니다.


답변

PDO는 “%”를 이스케이프합니다 (SQL 주입으로 이어질 수 있음) : 이전 코드를 사용하면 부분 문자열과 일치하려고 할 때 원하는 결과를 얻을 수 있지만 방문자가 “%”문자를 입력하면 그렇지 않더라도 결과를 얻을 수 있습니다. t 데이터베이스에 저장된 모든 것이 있음 (SQL 주입이 발생할 수 있음)

동일한 결과로 많은 변형을 시도해 보았습니다. PDO가 “%”를 벗어나 원치 않는 / 원치 않는 검색 결과를 선도하고 있습니다.

나는 누군가가 주변에 단어를 발견하면 나눌 가치가 있었지만 그것을 공유하십시오