mysql DOP como ligar LIKE

Nesta consulta

select wrd from tablename WHERE wrd LIKE '$partial%' 

Estou tentando vincular a variável '$partial%' ao PDO. Não sei como isso funciona com o % no final.

Seria

 select wrd from tablename WHERE wrd LIKE ':partial%' 

onde :partial está ligado a $partial="somet"

ou seria

 select wrd from tablename WHERE wrd LIKE ':partial' 

onde :partial está ligado a $partial="somet%"

ou seria algo completamente diferente?

    A resposta de +1 karim cobre isso. Você também pode dizer:

     "SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')" 

    para fazer a junit da string no final do MySQL, não que haja algum motivo específico para isso neste caso.

    As coisas ficam um pouco mais complicadas se o wrd parcial que você está procurando puder conter um caractere percentual ou sublinhado (já que eles têm um significado especial para o operador LIKE) ou uma barra invertida (que o MySQL usa como outra camada de escape no operador LIKE – incorretamente, de acordo com o padrão ANSI SQL).

    Espero que isso não afete você, mas se você precisa acertar esse caso, aqui está a solução confusa:

     $stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'"); $escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var); $stmt->bindParam(':term', $escaped); 
     $var = "partial%"; $stmt = $dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial"); $stmt->bindParam(":partial", $var); $stmt->execute(); // or $stmt->execute(array(':partial' => $var)); without // first calling bindParam() $rs = $stmt->fetchAll(); 

    Usando os parâmetros de ponto de interrogação:

     $stmt = $dbh->prepare('select wrd from tablename WHERE wrd LIKE ?'); $stmt->execute(array('partial%')); $rs = $stmt->fetchAll(); 

    http://www.php.net/manual/en/pdo.prepare.php

    Você pode usar addcslashes antes da instrução preparada. Eu testei no mysql.

     $value = addcslashes($value, '%'); $stmt = $db->prepare('select * from products where description like ?'); $stmt->execute(["$value%"]); 

    O código abaixo mostra apenas as primeiras palavras-chave no database!

     "SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')" 

    Tente este se você quiser pesquisar todas as palavras-chave do database

     "SELECT wrd FROM tablename WHERE wrd LIKE :partial"; $stmt->execute(array(':partial'=>'%'.$YourVarHere.'%')); 

    É assim que você deve fazer

     bindValue(':partial', '%' . $_GET['partial'] . '%'); 

    Obrigado,

    Qwerty

    Quem escreveu o answare (pode ser karim79):

     $var ="partial%" $stmt =$dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial") $stmt->bindParam(":partial",$var) $stmt->execute(); //or$stmt->execute(array(':partial'=>$var)); without // first calling bindParam() $rs =$stmt->fetchAll(); 

    Usando os parâmetros de ponto de interrogação:

     $stmt =$dbh->prepare('select wrd from tablename WHERE wrd LIKE ?'); $stmt->execute(array('partial%')); $rs =$stmt->fetchAll(); 

    Muito obrigado a ele. Eu estava procurando o código e vi muitos exemplos, mas não consegui resolver meu problema. Desta vez consegui fazê-lo. Eu usei a seção ‘Usando pontos de interrogação:’ do código.

    Para outras pessoas, se você quiser recuperar o valor de uma variável, pode alterar o código para

     $stmt->execute(array($variable.'%')); 

    ao invés de

     $stmt->execute(array('partial%')); 

    Porque a palavra “parcial” é especificada na resposta e não pode ser alterada. Muito obrigado.