Pergunta

Tentando fazer esse tipo de coisa...

WHERE username LIKE '%$str%'

...mas usando parâmetros vinculados a instruções preparadas no PDO.por exemplo.:

$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

Eu tentei inúmeras permutações de aspas simples e sinais% e isso está ficando irritado comigo.

Parece que me lembro de ter lutado com isso em algum momento antes, mas não consigo encontrar nenhuma referência.Alguém sabe como (se?) você pode fazer isso muito bem no PDO com parâmetros nomeados?

Foi útil?

Solução

Ah.Encontrei um comentário no php.net que me lembrou da resposta;você precisa inserir seu valor como curinga antes de bindParam ser avaliado e não se preocupar em citá-lo.Então, por exemplo, isso funciona bem:

$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

Outras dicas

5 anos depois, caso alguém se depare com isso, descobri um método alternativo.A solução aceita não era realmente viável para a minha situação, mas este método parece funcionar também:

$query = $db->prepare("select * FROM table WHERE field LIKE CONCAT('%',:search,'%')");
$query->bindParam(':search', $str);
$query->execute();

Não tenho certeza se haverá um impacto no desempenho devido à sobrecarga de chamar o CONCAT função, mas eu queria repassar isso como uma opção.Espero que ajude alguém.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top