Comunidad de diseño web y desarrollo en internet online

Operadores comparacion en sentencia prepare. AYUDA

Citar            
MensajeEscrito el 11 Dic 2015 08:01 am
Buenas! Soy novato en esto del PHP/SQL y me estoy volviendo tonto intentando conseguir que funcione parte de un código que estoy desarrollando.

Lo que me falla es esto:

$clauses['where'] .= $wpdb->prepare( " AND tabla1.variable1 LIKE '%s')) ", $param1);

Busco que, tras haber seleccionado ciertas partes de una tabla (tabla1) con $clauses['join'] .= $wpdb->prepare( " LEFT JOIN ( SELECT etc etc... , me muestre aquellas filas de la variable1 que CONTENGAN el texto del $param1.

Según lo tengo ahora mismo (...AND tabla1.variable1 LIKE '%s') lo que hace es mostrar aquellas que COINCIDE EXACTAMENTE con param1. Y así funciona bien. Pero como quiero que muestre las que la contengan, y no solo las que coincidan exactamente, he probado a poner (..AND tabla1.variable1 LIKE '%%s%'), es decir, el parametro entre los operadores %%, ya que he visto que estos actuan como comodín. Se supone que debería funcionar, pero lo que hace ahora es seleccionar TODAS las filas de la tabla, contengan o no el parametro buscado.

PREGUNTA: Alguien puede decirme cómo ponerlo para que me muestre las que CONTENGAN el valor del parámetro (no las que sean exactamente igual, ni todas las filas) ??

MIL GRACIAS!!

Por Derwydd2

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Dic 2015 11:57 am
No sé de dónde has sacado el objeto $wpdb ni qué hace el método ->prepare pero la sintaxis de la sentencia SQL que has querido poner es correcta. Se usan el caracter % para indicar cualquier cadena por delante o por detrás de la que estás buscando.

Así que el problema debe estar en que ->prepare entiende otra cosa cuando encuentra % en la cadena que le pasas como parámetro.

Por DriverOp

Claber

2510 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Dic 2015 05:36 pm
No se debe hacer eso con prepare()

debe entrar la sentencia completa.. no una sentencia que se vaya armando dinamicamente con prepare()

Puedes armar tu SQL dinamicamente, pero cuando entre al prepare() debe estar completa.

Por elporfirio

Claber

652 de clabLevel

1 tutorial

Genero:Masculino  

FullStack Web Developer

chrome
Citar            
MensajeEscrito el 11 Dic 2015 06:45 pm
Hola, ya he conseguido solucionarlo... :D

Por si a alguien más le pasa, dentro de una sentencia $wpdb->prepare (Wordpress) el comodín % se ha de poner doble (esto es, %%) para que lo entienda. Si no, no lo considera como comodín.

El código quedaría así:

$clauses['where'] .= $wpdb->prepare( " AND (tabla1.meta_value LIKE '%%%s%%') ", $param1);

De esta manera funciona correctamente.

Anyway, gracias a ambos por vuestro interés y ganas de ayudar ;)

Por Derwydd2

1 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.