programing

LIKE 문을 사용하여 PDO 파라미터화된 쿼리를 작성하려면 어떻게 해야 합니까?

randomtip 2022. 11. 1. 21:59
반응형

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, '%')

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

$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

반응형