2008-09-13 10 views
11

Tratar de hacer este tipo de cosas ...¿Cómo se hacen búsquedas difusas utilizando los parámetros vinculados en PDO?

WHERE username LIKE '%$str%' 

... pero usando parámetros vinculados a las declaraciones preparadas en DOP. ej .:

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

He intentado en numerosas permutaciones de comillas simples y signos% y se está poniendo cruz conmigo.

Parece que recuerdo haber luchado con esto en algún momento anterior, pero no puedo encontrar ninguna referencia. ¿Alguien sabe cómo (si?) Puede hacerlo bien en PDO con parámetros nombrados?

Respuesta

15

Ah. Encontré un comentario en php.net que me recordó la respuesta; necesita comodín su valor antes de que se evalúe bindParam, y no preocuparse por 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(); 
+0

Me alegro de que lo hayas encontrado. Lo encontré el otro día, también, buscando lo mismo. Lástima que no puedes aceptar tu propia respuesta. –

+1

Aha, lo arreglaron, ahora puedes aceptar tu propia respuesta. Bueno para usar StackOverflow como una biblioteca – Polsonby

4

5 años después, en caso de que alguien se tropieza demás sobre esto, hay un método alternativo que he descubierto. La solución aceptada en realidad no era 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 habrá un impacto en el rendimiento debido a la sobrecarga de llamar la CONCAT función, pero quería pasar esto como una opción. Espero que ayude a alguien.

+0

'$ query-> bindParam (': search',"% $ str% ");' no era factible? ¿Estás bromeando? –

+1

Jaja, sí, el código está en una función de abstracción de base de datos que genera una cláusula WHERE a partir de las entradas. Esa función no tiene acceso a los valores de los parámetros, solo las teclas. Probablemente haya una mejor manera de hacerlo, pero está funcionando por ahora, así que viviré con eso. –

+2

La votación a la baja parece un poco dura. Es una solución válida para el problema, ¿no? –

Cuestiones relacionadas