Foros del Web » Programando para Internet » PHP »

Fallo al ejecutar en PHP una SQL con LIKE (escapando clausula LIKE)

Estas en el tema de Fallo al ejecutar en PHP una SQL con LIKE (escapando clausula LIKE) en el foro de PHP en Foros del Web. Hola a todos: Tengo una tabla con un campo string llamado "criterio" que almacena clausulas WHERE: por ejemplo: Email_Cliente = '[email protected]' Tengo también un script ...
  #1 (permalink)  
Antiguo 27/01/2009, 07:07
 
Fecha de Ingreso: enero-2009
Mensajes: 2
Antigüedad: 15 años, 3 meses
Puntos: 0
Fallo al ejecutar en PHP una SQL con LIKE (escapando clausula LIKE)

Hola a todos:
Tengo una tabla con un campo string llamado "criterio" que almacena clausulas WHERE: por ejemplo: Email_Cliente = '[email protected]'

Tengo también un script de PHP que busca dentro de esa tabla por el campo "criterio". Pero cuando desde PHP, contruyo dinámicamente el criterio, no devuelve nada. Las SQL construidas son como la siguiente:
Código:
SELECT * FROM tabla WHERE criterio LIKE "%Telefono_Cliente = '123456' AND ( Nombre_Cliente = 'pepito' AND Apellidos_Cliente = 'perez' )%"
Esta SQL debería devolver 1 row pero desde PHP no devuelve nada. Si la ejecuto desde MySQL Browser, la SQL funciona bien y devuelve el criterio.
Es curioso pero además, si escribo en el script de PHP la SQL tal cual en una cadena, entonces sí que funciona.
Las SQLs las ejecuto con detección de errores:
Código:
try {
		$rs = mysql_query($sql);
		if (mysql_errno()) {
        	$error = "MySQL Error ".mysql_errno().": ".mysql_error()."\n<br>When executing:<br>\n$sql\n<br>";
        	echo $error.'<br />';
		} 
    } catch (Exception $e) {
    	echo 'Caught exception: ',  $e->getMessage(), "\n";
    }
...pero ningún error se reporta.
Yo creo que se trata de un problam de escapar los caracteres del LIKE pero he probado a escaparlos con addslahes y mysql_real_escape_string pero nada.
Si alguien ha tenido el mismo problema y tiene alguna idea.....
  #2 (permalink)  
Antiguo 27/01/2009, 15:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Fallo al ejecutar en PHP una SQL con LIKE (escapando clausula LIKE)

Tema trasladado a PHP.

http://www.forosdelweb.com/f21/funci...-datos-413499/
  #3 (permalink)  
Antiguo 27/01/2009, 21:00
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 2 meses
Puntos: 67
Respuesta: Fallo al ejecutar en PHP una SQL con LIKE (escapando clausula LIKE)

Cita:
SELECT * FROM tabla WHERE criterio LIKE "%Telefono_Cliente = '123456' AND ( Nombre_Cliente = 'pepito' AND Apellidos_Cliente = 'perez' )%"
Pues que mal has entendido el uso de LIKE, te explico un poco. El LIKE se usa para hacer consultas con carácteres comodines de manera sencilla, por ejemplo si yo coloco:

SELECT * FROM tabla WHERE nombre LIKE 'A%'

Estoy buscando todos los reqistros cuyo campo nombre comienze con A, el carácter % representa cualquier combinación de carácteres. Esa es la forma de usarse. Espero te hayas dado cuenta de tu error y reformules tu sentencia SQL.
  #4 (permalink)  
Antiguo 28/01/2009, 08:11
 
Fecha de Ingreso: enero-2009
Mensajes: 2
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Fallo al ejecutar en PHP una SQL con LIKE (escapando clausula LIKE)

Bueno, al final la sentencia SQL era correcta.
El problema estaba en que, al componerla, metía sin darme cuenta varios espacios en blanco. Al hacer un "echo" esos espacios en blanco no se veían.
Al final los detecté utilizando la función "strncmp" de PHP para la comparación de cadenas:
http://es.php.net/manual/en/function.strncmp.php
Comparaba la cadena SQL que funcionaba con la que no funcionaba, letra a letra.
Ahora todo va bien.
Bueno, gracias a los que habéis respondido.
Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:15.