2012-06-20 11 views
27

Me postulo problemas en la aplicación de LIKE en DOPponer en práctica como la consulta de DOP

que tienen esta consulta:

$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'"; 
$params = array($var1, $var2); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 

he comprobado la $var1 y $var2 que contienen tanto las palabras que desea buscar, mi PDO está funcionando bien ya que algunas de mis consultas SELECTINSERT funcionan, es solo que no estoy familiarizado en LIKE aquí en PDO.

El resultado no ha sido devuelto. ¿Mi $query es sintácticamente correcto?

Respuesta

61

Usted tiene que incluir los % señales en el $params, no en la consulta:

$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; 
$params = array("%$var1%", "%$var2%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 

Si desea mira la consulta generada en su código anterior, verá algo como SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%', porque la instrucción preparada está citando sus valores dentro de una cadena ya citada.

+0

+1 para la explicación. Pero no creo que haya una manera de ver la consulta generada ... ¿hay algo así? – Vignesh

+0

No pude entender esto por mi vida y me había olvidado de todo esto. Impresionante respuesta. ¡Gracias! – b3tac0d3

5

No, no es necesario que cite preparar marcadores de posición. Además, incluya el% de las marcas dentro de sus variables.

LIKE ? 

Y en la variable: %string%

+0

Hmm, perdón pero no estoy muy seguro de cómo poner en práctica lo que acaba sugerido. –

+0

Estoy en el móvil, pero intentaré explicar lo mejor que pueda. Ver mi edición –

4
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; 
$params = array("%$var1%", "%$var2%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 
2

Puede ver más adelante ejemplo

$title = 'PHP%'; 
$author = 'Bobi%'; 
// query 
$sql = "SELECT * FROM books WHERE title like ? AND author like ? "; 
$q = $conn->prepare($sql); 
$q->execute(array($title,$author)); 

esperanza de que va a funcionar.

1

basta con utilizar el siguiente:

$query = "SELECT * FROM tbl WHERE address LIKE CONCAT('%', :var1, '%') 
      OR address LIKE CONCAT('%', :var2, '%')"; 

$ar_val = array(':var1'=>$var1, ':var2'=>$var2); 
if($sqlprep->execute($ar_val)) { ... } 
+0

Esto es más lento que agregar el% directamente a las variables vinculadas. – CristiC

Cuestiones relacionadas