PHP - AYUDA operadores comparacion sentencia prepare

 
Vista:

AYUDA operadores comparacion sentencia prepare

Publicado por Derwydd (3 intervenciones) el 11/12/2015 09:02:27
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!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

AYUDA operadores comparacion sentencia prepare

Publicado por xve (6935 intervenciones) el 11/12/2015 10:29:26
Hola Derwtdd, es exactamente como comentas, al poner los % actúan como comodín...

Nos puedes mostrar la linea entera?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA operadores comparacion sentencia prepare

Publicado por Derwydd (3 intervenciones) el 11/12/2015 11:07:28
Hola xve, gracias por la respuesta. Incluyo el código:


1
2
3
$clauses['join'] .= $wpdb->prepare( " LEFT JOIN ( SELECT post_id, meta_value FROM $wpdb->postmeta WHERE (meta_key LIKE 'location') ) as tabla1 ON ($wpdb->posts.ID = tabla1.post_id)");
 
$clauses['where'] .= $wpdb->prepare( " AND (tabla1.meta_value LIKE '%s') ", $param1);



Como comentaba, funciona perfectamente sin los simbolos %% mostrando las filas que son exactas al valor que toma el parametro. Pero al poner %% no hace lo que debería... ¿Quizá por estar dentro de una sentencia prepare?. Para más info, por si tuviera algo que ver, todo esto está dentro de una función que retorna el valor de $clauses. Lo que me descoloca es que funcione bien sin los símbolos pero con los comodines no... Y justo lo que necesito es precisamente esos comodines (u otra manera equivalente de hacer lo que hacen ellos).

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

AYUDA operadores comparacion sentencia prepare

Publicado por xve (6935 intervenciones) el 11/12/2015 15:34:37
Hola Derwydd, entiendo que utilizas PDO verdad... En mi caso, en vez de utilizar %s utilizo ? y me funciona correctamente...

Puedes probarlo y comentarnos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA operadores comparacion sentencia prepare

Publicado por Derwydd (3 intervenciones) el 11/12/2015 19:51:18
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);

Anyway, gracias xve por tu interés y ganas de ayudar ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

AYUDA operadores comparacion sentencia prepare

Publicado por xve (6935 intervenciones) el 12/12/2015 11:01:06
Muy bueno!!!!

Gracias por compartirlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar