답변:
내가 게시 한 직후에 그것을 알아 냈습니다.
$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을 결합 할 때주의해야 할 것입니다.
LIKE CONCAT('%', :something, '%')
. 참조 : stackoverflow.com/a/661207/201648
SELECT * FROM calculation WHERE ( email LIKE '%' || luza || '%' OR siteLocation LIKE '%'|| luza ||'%' OR company LIKE '%' ||luza ||'%' )
오류가 발생했습니다.
and it means named placeholders can be used
. PHP에서 연결할 때 이름이 지정된 자리 표시 자 문제가되는 이유는 무엇입니까? 분명히 PHP에서 연결은 모든 데이터베이스에 대해 동일한 쿼리를 사용할 수 있기 때문에 이름이 지정된 위치와 위치를 모두 지원하며 이식성이 뛰어납니다. 많은 사람들이 생각하는 이유를 정말 이해하지 못하는 어떤 이름과 위치 자리의 차이는.
$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';
}
bindValue
은 주입 공격으로부터 보호 합니까 ? 받아 들여지는 대답은 기본적으로 ?
검색 문자열을 %
예전처럼 좋아 하도록 연결 하여 자리 표시자를 사용하는 값을 부정합니다 .
이것을 시도 할 수도 있습니다. 비슷한 문제에 직면했지만 연구 결과를 얻었습니다.
$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);
PDO는 "%"를 이스케이프합니다 (SQL 주입으로 이어질 수 있음) : 이전 코드를 사용하면 부분 문자열과 일치하려고 할 때 원하는 결과를 얻을 수 있지만 방문자가 "%"문자를 입력하면 그렇지 않더라도 결과를 얻을 수 있습니다. t 데이터베이스에 저장된 모든 것이 있음 (SQL 주입이 발생할 수 있음)
동일한 결과로 많은 변형을 시도해 보았습니다. PDO가 "%"를 벗어나 원치 않는 / 원치 않는 검색 결과를 선도하고 있습니다.
나는 누군가가 주변에 단어를 발견하면 나눌 가치가 있었지만 그것을 공유하십시오
like
을 사용하면 어떨까요? 실행 배열은 어떻게 순서대로 실행되어야합니까?