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'];
}
% 부분 일치와 함께 Like를 사용하려면 다음을 수행 할 수도 있습니다 . column like concat('%', :dangerousstring, '%')
명명 된 매개 변수 :dangerousstring
. 즉, 사용자 입력이 아닌 분리 된 자체 쿼리에 명시 적으로 이스케이프 처리되지 않은 % 기호를 사용하는 것입니다.
편집 : 내가 찾은 다른 연결 구문은 연결 연산자 : ||를 사용하는 것이므로 간단하게 다음과 같이됩니다.where column like '%' || :dangerousstring || '%' etc
@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가 "%"를 벗어나 원치 않는 / 원치 않는 검색 결과를 선도하고 있습니다.
나는 누군가가 주변에 단어를 발견하면 나눌 가치가 있었지만 그것을 공유하십시오
If you want to do it with php and not in the query
$string = 'this is a string';
$len = strlen($string);
$first = substr_replace($string, '%', 0,0); // insert % before the first character
$string = substr_replace($first, '%', $len+1,0); // insert % after the last one
The $string
will have the value '%this is a string%'
I made a function out of it and use it for my like statements
'Programming' 카테고리의 다른 글
Python으로 minidom으로 요소 값 가져 오기 (0) | 2020.08.18 |
---|---|
UITableView의 tableHeaderView 크기를 조정하는 방법은 무엇입니까? (0) | 2020.08.18 |
Linux, 그룹 권한이 있는데도 쓸 수없는 이유는 무엇입니까? (0) | 2020.08.18 |
공백이있는 왼쪽 패드 printf (0) | 2020.08.18 |
다차원 배열을 텍스트 파일에 쓰는 방법은 무엇입니까? (0) | 2020.08.18 |