내 시도는 다음과 같습니다.
$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가 “%”를 벗어나 원치 않는 / 원치 않는 검색 결과를 선도하고 있습니다.
나는 누군가가 주변에 단어를 발견하면 나눌 가치가 있었지만 그것을 공유하십시오