Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP MYSQL curioso problema en el WHERE

Estas en el tema de PHP MYSQL curioso problema en el WHERE en el foro de PHP en Foros del Web. Hola a todos, Tengo esta consulta en el fichero PHP que devuelve valores pero cuando le añado una 'b' a la parte de después del ...
  #1 (permalink)  
Antiguo 25/12/2015, 03:50
 
Fecha de Ingreso: diciembre-2015
Mensajes: 7
Antigüedad: 8 años, 4 meses
Puntos: 0
PHP MYSQL curioso problema en el WHERE

Hola a todos,

Tengo esta consulta en el fichero PHP que devuelve valores pero cuando le añado una 'b' a la parte de después del LIKE deja de mostrar valores.

$sel_usuario = mysql_query("SELECT psp_usuarios.* FROM `psp_usuarios`
WHERE `username` LIKE 'mi011mi%'
LIMIT 2 ,2")or die(mysql_error());
while($usuario = mysql_fetch_assoc($sel_usuario)){
$arr_usuario[] = $usuario;
print_r($arr_usuario);
}
echo count($arr_usuario);

Es decir, cambiando a WHERE `username` LIKE 'mi011mib%' ya no devuelve nada.

En la BD tengo un usuario que se llama mi011mibracladr pero no se por qué no se me muestra. de hecho el count de resultados sale cero.

Se me ocurre que pueda tener que ver con algo de codificación porque desde PHPMyadmin la consulta funciona sin ningún problema pero no doy con la clave.

He estado probando unas cuantas horas cambiando el like por '=' y poniendo el nombre completo del usuario pero nada..

Muchas gracias por echarme un cable.
Saludos,
J.
  #2 (permalink)  
Antiguo 25/12/2015, 05:38
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: PHP MYSQL curioso problema en el WHERE

Es por el limit lo tienes 2, 2 y debería ser 0,2. Por que le estas pidiendo que muestre los resultados a partir de la posición dos 2 y no desde el principio.
Vamos las 2 primeras posiciones aunque tenga resultado no las va a tener en cuenta. Por lo que si la consulta solo devuelve 1 resultado no te lo va a mostrar.
  #3 (permalink)  
Antiguo 25/12/2015, 05:52
 
Fecha de Ingreso: diciembre-2015
Mensajes: 7
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: PHP MYSQL curioso problema en el WHERE

Hola,

Muchas gracias por responder tan rápido. Parece que no es ese el problema. El limit lo había puesto porque firefox decía:
"Firefox ha detectado que el servidor está redirigiendo la solicitud a esta dirección de una manera en la que nunca terminará."

Creo que no tiene sentido que la consulta funcione con LIKE 'mi011mi%' y no con 'mi011mib%' :p, a saber qué pasa.

$sel_usuario = mysql_query("SELECT psp_usuarios.* FROM `psp_usuarios`
WHERE `username` LIKE 'mi011mi%'
LIMIT 2 ,2")or die(mysql_error());

La consulta original era esta:
$sel_usuario = mysql_query("SELECT datos_usuarios.*
FROM psp_usuarios
JOIN datos_usuarios
ON datos_usuarios.IDPsp = psp_usuarios.id
WHERE psp_usuarios.username = '$username' ")or die(mysql_error());

pero al ver que no hace bien la parte del WHERE he decidido simplificarla hasta haber visto que el problema estaba ahí. La variable tiene el contenido correcto. es muy curioso.
Gracias por echarme una mano
Saludos,
Jesús
  #4 (permalink)  
Antiguo 08/01/2016, 06:10
 
Fecha de Ingreso: diciembre-2015
Mensajes: 7
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: PHP MYSQL curioso problema en el WHERE

¿Alguna idea?
Gracias
  #5 (permalink)  
Antiguo 08/01/2016, 06:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP MYSQL curioso problema en el WHERE

Cita:
"Firefox ha detectado que el servidor está redirigiendo la solicitud a esta dirección de una manera en la que nunca terminará."
Eso no tiene ninguna relación con el LIMIT. En todo caso puede ser un problema con la performance de la query, pero no con el LIMIT.
Cuando pones
Código MySQL:
Ver original
  1. LIMIT 2, 2
lo que le estás indicando a MySQL es que si la consuta devuelve más de dos registros, saltee los dos primeros y te muestre el tercero. Eso quiere decir que si ese usuario está en alguna de las dos primeras posiciones jamás lo verás, porque lo estás descartando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 08/01/2016, 06:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP MYSQL curioso problema en el WHERE

VE al phpMyadmin y prueba esta query
Código MySQL:
Ver original
  1. SELECT DU.*
  2. FROM psp_usuarios PU INNER JOIN datos_usuarios DU ON DU.IDPsp = PU.id
  3. WHERE PU.username = 'mi011mibracladr '
Luego muestra el resultado de la misma.

Si falla, prueba simplemente esto:

Código MySQL:
Ver original
  1. SELECT COUNT(*) totalIds
  2. FROM psp_usuarios PU INNER JOIN datos_usuarios DU ON DU.IDPsp = PU.id
  3. WHERE PU.username = 'mi011mibracladr '
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 08/01/2016, 07:59
 
Fecha de Ingreso: diciembre-2015
Mensajes: 7
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: PHP MYSQL curioso problema en el WHERE

Muchas gracias por tu respuesta.
He simplificado la consulta pero sigue igual.

Ya había probado en la consola de Mysql y en PHPmyAdmin
Sin poner el limit no va bien. Si pruebo el limit en phpmyadmin o en la consola de mysql funciona como debería.

ahora para simplificar he puesto:
$sample="mi011mib%";

$sel_usuario = mysql_query("SELECT username FROM `psp_usuarios` WHERE `username` like '$sample' ")
or die(mysql_error());
while($usuario = mysql_fetch_assoc($sel_usuario)){
$arr_usuario[] = $usuario;
print_r($arr_usuario);
}

El último print me devuelve
[0] => Array ( [username] => mi011mibar ) )
[1] => Array ( [username] => mi011miborracladera ) ) 2

sin embargo al cambiar la variable $sample y ponerle una 'o' al final ya no funciona $sample="mi011mibo%";
me parece muy extraño.
aparece el mensaje:
Firefox ha detectado que el servidor está redirigiendo la solicitud a esta dirección de una manera en la que nunca terminará.
  #8 (permalink)  
Antiguo 08/01/2016, 08:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP MYSQL curioso problema en el WHERE

Cuando se te pide que hagas una prueba y posteees un resultado, haz el favor de hacer exactamente lo que se te pide.
Lo que dices en forma descriptiva no sirve para nada. Necesitamos VERLO nosotros mismos. Hay muchas cosas que no son evidentes a simple vista.

Prueba y postea el resultado de esto, pero no lo hagas por codigo, sino en la consola de MySQL:
Código MySQL:
Ver original
  1. SELECT COUNT(*) totalIds
  2. FROM psp_usuarios PU INNER JOIN datos_usuarios DU ON DU.IDPsp = PU.id
  3. WHERE PU.username LIKE 'mi011mibo%'
y esto:
Código MySQL:
Ver original
  1. SELECT COUNT(*) totalIds
  2. FROM psp_usuarios PU
  3. WHERE PU.username LIKE 'mi011mibo%'
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 08/01/2016, 09:49
 
Fecha de Ingreso: diciembre-2015
Mensajes: 7
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: PHP MYSQL curioso problema en el WHERE

Hola,

Eso lo entiendo pero

Este es el resultado de:
mysqSELECT COUNT(*) totalIds FROM psp_usuarios PU INNER JOIN datos_usuarios DU ON DU.IDPsp = PU.id WHERE PU.username LIKE 'mi011mibo%';

TotalIds: 2

y el de la 2ª : TotalIds: 1

Gracias,
Jesús
  #10 (permalink)  
Antiguo 08/01/2016, 10:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP MYSQL curioso problema en el WHERE

Bueno, eso lo que nos dice es que tienes un único registro de la tabla psp_usuarios relacionado con dos registros de la tabla datos_usuarios que comienzan con "mi011mibo".
¿Eso debería ser correcto?

Da la impresión de que no.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 08/01/2016, 10:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP MYSQL curioso problema en el WHERE

Vamos a ver si con esta prueba se entiende por qué el LIMIT que estás poniendo está MAL:
Código MySQL:
Ver original
  1. mysql> USE test;
  2. Database changed
  3. mysql>
  4. mysql> DROP TABLE IF EXISTS tabla;
  5. Query OK, 0 rows affected (0.02 sec)
  6.  
  7. mysql> CREATE TABLE IF NOT EXISTS tabla (
  8.     ->     nombre VARCHAR(100)
  9.     -> );
  10. Query OK, 0 rows affected (0.08 sec)
  11.  
  12. mysql> INSERT INTO tabla(nombre) VALUES ('mi011miboghj'), ('mi011miboxyz');
  13. Query OK, 2 rows affected (0.03 sec)
  14. Records: 2  Duplicates: 0  Warnings: 0
  15.  
  16. mysql> SELECT
  17.     ->     *
  18.     -> FROM
  19.     ->     tabla
  20.     -> WHERE
  21.     ->     nombre LIKE 'mi011mibo%'
  22.     -> LIMIT 2, 2;
  23. Empty set (0.00 sec)
  24.  
  25. mysql>
Y si la consulta la haces así:
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     *
  3.     -> FROM
  4.     ->     tabla
  5.     -> WHERE
  6.     ->     nombre LIKE 'mi011mibo%'
  7.     -> LIMIT 2;
  8. +----+--------------+
  9. | id | nombre       |
  10. +----+--------------+
  11. |  1 | mi011miboghj |
  12. |  2 | mi011miboxyz |
  13. +----+--------------+
  14. 2 rows in set (0.00 sec)

¿Se entiende?
Con esa cantidad de registros, NUNCA obtendrías los dos primeros usando ese LIMIT.

Por empezar, es absurdo que relaciones el error de ejecución con el limit. No tiene sentido, a menos que la query real esté MAL, pero como no la estas mostrando tal y como queda lo que MySQL recibe, no hay forma de saber si no es un error de TU parámetro.
al menos deberías verificar esto:
Código PHP:
Ver original
  1. $sample="mi011mib%";
  2.  
  3. $qry="SELECT username FROM `psp_usuarios` WHERE `username` like '$sample' ";
  4. echo $qry;
como para verificar si realmente está llegando todo bien.


POSDATA:

Estuve buscando el mensaje "Firefox ha detectado que el servidor está redirigiendo la solicitud a esta dirección de una manera en la que nunca terminará.", y toda la documentación que encuentro hace referencia fundamentalmente a que es un problema originado por la s cookies y su aceptación por parte del navegador...


Alguna de las soluciones encontradas:
http://www.mozillaes.org/foros/viewtopic.php?t=26123
https://www.prestashop.com/forums/to...e/#entry552803
https://moodle.org/mod/forum/discuss.php?d=246004

En incluso en FDW:

http://www.forosdelweb.com/f18/error...eader-1088217/
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 08/01/2016 a las 12:38
  #12 (permalink)  
Antiguo 09/01/2016, 12:55
 
Fecha de Ingreso: diciembre-2015
Mensajes: 7
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: PHP MYSQL curioso problema en el WHERE

Muchas gracias gnzsoloyo por tu ayuda,

La verdad es que leyendo tu último post diría que parece ser según indica la documentación que incluyes un problema de configuración del servidor pero no me ha funcionado el cambio en el php.ini que propone el enlace que me envías:
https://moodle.org/mod/forum/discuss.php?d=246004
Debe faltar algo más.


Describo el problema en detalle por si alguien tiene alguna idea:

Teniendo en la base de datos estos dos registros en la tabla psp_usuarios:
+---------------------+
| username |
+---------------------+
| mi011mibar |
| mi011miborrac |
+---------------------+

si ejecuto la consulta
SELECT username FROM `psp_usuarios` WHERE `username` LIKE "mi011mib%" en el editor de Mysql devuelve los dos registros.

si la ejecuto añadiendo una o o bien poniendo lo cual es correcto :
WHERE `username` LIKE "mi011miborrac" devuelve un registro

Cuando en el código PHP pongo el código de abajo funciona perfectamente devolviendo los dos valores:
$sel_usuario = mysql_query("SELECT username FROM `psp_usuarios` WHERE `username` LIKE 'mi011mib%' ")
or die(mysql_error());
while($usuario = mysql_fetch_assoc($sel_usuario)){
$arr_usuario[] = $usuario;
print_r($arr_usuario);
}
echo count($arr_usuario);

Pero si pongo `username` LIKE 'mi011mibo%' ") ya queda en el bucle.
En Chrome dice esto:
Esta página web tiene un bucle de redireccionamiento
La página web http://localhost/sjp/aplicaciones/ ha producido demasiados redireccionamientos.
Es posible que el problema se resuelva borrando las cookies de este sitio o permitiendo cookies de terceros. Si eso no funciona, puede que el problema esté relacionado con algún fallo en la configuración del servidor, no con el ordenador.

Entiendo que tendré que revisar la config. de WAMP ya que borrar las cookies no da resultado.

Muchas gracias!
  #13 (permalink)  
Antiguo 09/01/2016, 13:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PHP MYSQL curioso problema en el WHERE

¿Puedes postear el código completo de ese script? No sólo esa parte, sino TODO el script.
Tal vez el error no está dándose en la query...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 11/01/2016, 02:27
 
Fecha de Ingreso: diciembre-2015
Mensajes: 7
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: PHP MYSQL curioso problema en el WHERE

Hola a todos,

Efectivamente como dices el problema lo causaba un bucle que había tras la query.
Ya lo he resuelto cambiando la condición de este bucle.

Muchas gracias por ayudarme con el problema.

Saludos,
Jesús

Etiquetas: Ninguno
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 22:21.