php - optimización - optimizar consultas sql
implementar la consulta LIKE en PDO (5)
Debe incluir los signos %
en los $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 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 es citando sus valores dentro de una cadena ya citada.
Estoy teniendo problemas para implementar LIKE en PDO
Tengo esta consulta:
$query = "SELECT * FROM tbl WHERE address LIKE ''%?%'' OR address LIKE ''%?%''";
$params = array($var1, $var2);
$stmt = $handle->prepare($query);
$stmt->execute($params);
Comprobé $var1
y $var2
que contienen tanto las palabras que quiero buscar, mi PDO está funcionando bien ya que algunas de mis consultas SELECT
INSERT
funcionan, es solo que no estoy familiarizado con LIKE
aquí en PDO.
El resultado no se devuelve. ¿Mi $query
es sintácticamente correcta?
No, no es necesario que cites preparar marcadores de posición. Además, incluya el% de las marcas dentro de sus variables.
LIKE ?
Y en la variable: %string%
Puedes ver abajo el 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));
Espero que funcione
Simplemente use lo 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)) { ... }
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
$params = array("%$var1%", "%$var2%");
$stmt = $handle->prepare($query);
$stmt->execute($params);