¿Cómo hacer búsquedas aproximadas utilizando los parámetros vinculados en PDO?

StackOverflow https://stackoverflow.com/questions/60779

  •  09-06-2019
  •  | 
  •  

Pregunta

Tratando de hacer este tipo de cosas...

WHERE username LIKE '%$str%'

...pero el uso de los parámetros vinculados a las declaraciones preparadas en PDO.por ejemplo:

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

He intentado numerosas permutaciones de una sola de las comillas y los signos % y es sólo conseguir la cruz.

Me parece recordar que la lucha con esto en algún momento antes, pero no puedo encontrar ninguna referencia.¿Alguien sabe cómo (si?) usted puede hacer esto muy bien en el PDO con los parámetros con nombre?

¿Fue útil?

Solución

Ah.Encuentra un comentario en php.net eso me recordó la de la respuesta;usted necesita comodín su valor antes de la bindParam se evalúa, y no preocuparse de citarlo.Así, por ejemplo, esto funciona bien:

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

Otros consejos

5 años más tarde, en caso de que alguien se topa con esto, hay un método alternativo que he descubierto.La aceptación de la solución no era realmente factible para mi situación, pero este método parece hacer el trabajo así:

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

No estoy seguro de si va a haber un impacto en el rendimiento debido a la sobrecarga de llamar a la CONCAT la función, pero quería pasar esta como una opción.Espero que ayude a alguien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top