mysql PDO cómo vincular LIKE

En esta consulta

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

Estoy intentando vincular la variable '$partial%' con PDO. No estoy seguro de cómo funciona esto con el % al final.

Podría ser

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

donde :partial está obligado a $partial="somet"

o sería

 select wrd from tablename WHERE wrd LIKE ':partial' 

donde :partial está limitado a $partial="somet%"

o sería algo completamente diferente?

+1 la respuesta de karim lo cubre. También podrías decir:

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

para hacer la unión de cadenas en el extremo de MySQL, no hay ninguna razón particular para en este caso.

Las cosas se vuelven un poco más complicadas si la wrd parcial que está buscando puede contener un carácter de porcentaje o de subrayado (ya que tienen un significado especial para el operador LIKE) o una barra invertida (que MySQL usa como otra capa de escape en el operador LIKE – incorrectamente, según el estándar ANSI SQL).

Esperemos que eso no te afecte, pero si necesitas resolver bien el caso, aquí está la solución desordenada:

 $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(); 

Usar los parámetros del signo de interrogación:

 $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

Puede usar addcslashes antes de la instrucción preparada. Probé en mysql.

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

El siguiente código muestra solo las primeras palabras clave en la base de datos.

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

Prueba esto si quieres buscar todas las palabras clave de la base de datos

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

Así es como deberías hacerlo

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

Gracias,

QWERTY

Quién ha escrito el answare (puede 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(); 

Usar los parámetros del signo de interrogación:

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

Muchas gracias a él. Estaba buscando el código y vi muchos ejemplos, pero no pude resolver mi problema. Esta vez he tenido éxito en hacerlo. Utilicé la sección ‘Usar parámetros de marca de pregunta:’ del código.

Para otros, si desea recuperar el valor de una variable, puede cambiar el código a

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

en lugar de

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

Porque la palabra ‘parcial’ se especifica en la respuesta y no se puede cambiar. Muchas gracias.