Como executar uma consulta com o operador LIKE com PDO

Resumo : neste tutorial você aprenderá como usar o PDO para executar uma consulta com o operador LIKE.

Introdução ao operador SQL LIKE

O operador LIKE retorna truese uma sequência de caracteres corresponder a um padrão especificado. Normalmente, um padrão inclui caracteres curinga como:

  • %corresponde a qualquer sequência de zero ou mais caracteres
  • _corresponde a qualquer caractere único.

Por exemplo, %er% corresponderá a qualquer string que contenha a string er, por exemplo, peter, understand, etc.

Normalmente, você usa o operador LIKE na cláusula WHERE da instrução SELECT, UPDATE e DELETE.

Execute uma consulta que contenha o operador LIKE no PDO

Para executar uma consulta que contém um operador LIKE no PDO, você precisa construir o padrão antecipadamente.

Por exemplo, para selecionar o livro com títulos que contenham a string ‘es, primeiro você constrói uma instrução SELECT como esta:

$sql = 'SELECT book_id, title 
        FROM books 
        WHERE title LIKE :pattern';Linguagem de código:  PHP  ( php )

E então vincule a string '%es%' à instrução preparada.

O exemplo a seguir ilustra como executar uma consulta que inclui o operador LIKE:

<?php

/**
* Find books by title based on a pattern
*/
function find_book_by_title(\PDO $pdo, string $keyword): array
{
    $pattern = '%' . $keyword . '%';

    $sql = 'SELECT book_id, title 
        FROM books 
        WHERE title LIKE :pattern';

    $statement = $pdo->prepare($sql);
    $statement->execute([':pattern' => $pattern]);

    return  $statement->fetchAll(PDO::FETCH_ASSOC);
}

// connect to the database
$pdo = require 'connect.php';

// find books with the title matches 'es'
$books = find_book_by_title($pdo, 'es');

foreach ($books as $book) {
    echo $book['title'] . '<br>';
}Linguagem de código:  PHP  ( php )

Como funciona.

A função find_book_by_title()retorna os livros com o título que corresponde ao arquivo $keyword.

Primeiro, faça o padrão adicionando os caracteres curinga ao início e ao final do $keyword:

$pattern = '%' . $keyword . '%';Linguagem de código:  PHP  ( php )

Segundo, construa uma instrução SQL que contenha um operador LIKE na cláusula WHERE:

$sql = 'SELECT book_id, title 
        FROM books 
        WHERE title LIKE :pattern';Linguagem de código:  PHP  ( php )

Terceiro, crie uma declaração preparada:

$statement = $pdo->prepare($sql);Linguagem de código:  PHP  ( php )

Depois disso, execute a instrução com o valor que vem do padrão:

$statement->execute([':pattern' => $pattern]);Linguagem de código:  PHP  ( php )

Finalmente, retorne todas as linhas do conjunto de resultados usando o método fetchAll():

return  $statement->fetchAll(PDO::FETCH_ASSOC);Linguagem de código:  PHP  ( php )

O código a seguir para encontrar livros com o título contém a palavra-chave 'es':

// connect to the database
$pdo = require 'connect.php';

// find books with the title matches 'es'
$books = find_book_by_title($pdo, 'es');

foreach ($books as $book) {
    echo $book['title'] . '<br>';
}Linguagem de código:  PHP  ( php )

Saída:

Marcus Makes a Movie
Box of ButterfliesLinguagem de código:  PHP  ( php )

Resumo

  • Construa um padrão antes de passá-lo para uma instrução preparada que inclua o operador LIKE.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *