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
와 함께%
MySQL 데이터베이스에 대한 부분 일치:
여기서 column_name LIKE CONCAT('%', : columstring, '%')
여기서 named 파라미터는:dangerousstring
.
즉, 명시적으로 에스케이프 없이 사용%
사용자 입력이 아닌 분리된 자체 쿼리의 기호입니다.
편집: Oracle 데이터베이스의 연결 구문에서는 연결 연산자를 사용합니다.||
그 결과 다음과 같이 됩니다.
Where column_name LIKE '%' | : slikestring | | '%'
단, @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, '%')
$search = "%$search%";
$stmt = $pdo->prepare("SELECT * FROM table WHERE name LIKE ?");
$stmt->execute([$search]);
$data = $stmt->fetchAll();
그리고 그것은 나에게 효과가 있습니다, 매우 간단해.그가 말한 것처럼, 당신은 그것을 쿼리에 보내기 전에 "완전한 문자 그대로를 먼저 준비"해야 합니다.
PDO 이스케이프 % (SQL 주입으로 이어질 수 있음):이전 코드를 사용하면 부분 문자열과 일치할 때 원하는 결과를 얻을 수 있습니다. 그러나 방문자가 "%" 문자를 입력하면 데이터베이스에 저장된 항목이 없어도 결과를 얻을 수 있습니다(SQL 주입으로 이어질 수 있음).
많은 변형을 시도했지만 PDO가 %%를 이스케이프하여 원치 않는/excit되지 않은 검색 결과를 유도하고 있습니다.
혹시 뭔가 발견하신 분 있으면 공유해 주세요.
나도 비슷한 욕구가 있었지만 폼에서 얻은 변수를 사용하고 있었다.Postgre의 결과를 얻기 위해 이렇게 했습니다.SQL DB, PHP 사용:
<?php
$player = $_POST['search']; //variable from my search form
$find = $sqlPDO->prepare("SELECT player FROM salaries WHERE player ILIKE ?;");
$find->execute(['%'.$player.'%']);
while ($row = $find->fetch()) {
echo $row['player']."</br>";
}
?>
"ILIKE"는 대소문자를 구분하지 않으므로 카트, 카트 또는 cART를 검색해도 모두 동일한 결과가 반환됩니다.
이 작업을 수행할 수 있는 유일한 방법은 %$search%를 다른 변수에 넣는 것이었습니다.
if(isset($_POST['submit-search'])){
$search = $_POST['search'];
}
$query = 'SELECT * FROM posts WHERE post_title LIKE :search';
$value ="%$search%";
$stmt= $pdo->prepare($query);
$stmt->execute(array(':search' => $value));
이 방법을 사용하는 것이 가장 좋은 방법인지 모르겠습니다.그동안 사용한 루프는 다음과 같습니다.
while ($r = $stmt->fetch(PDO::FETCH_ASSOC)){
언급URL : https://stackoverflow.com/questions/583336/how-do-i-create-a-pdo-parameterized-query-with-a-like-statement
'programing' 카테고리의 다른 글
숫자의 나눗셈 나머지를 찾습니다. (0) | 2022.11.01 |
---|---|
PHP에서 문자열을 올바르게 인코딩하려면 어떻게 해야 합니까? (0) | 2022.11.01 |
스프링 부트 @ResponseBody가 엔티티 ID를 직렬화하지 않음 (0) | 2022.11.01 |
MySQL의 DESCRIPT [표]와 동등한 SQLite가 있습니까? (0) | 2022.11.01 |
phpMyAdmin 행을 편집 또는 삭제하려고 하면 오류 #1064가 나타납니다. (0) | 2022.11.01 |