Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] ¿Está bien hecha esta consulta? Tengo Dudas

Estas en el tema de ¿Está bien hecha esta consulta? Tengo Dudas en el foro de Mysql en Foros del Web. Foreros hola, espero que se encuentren muy bien. Mi pregunta es la siguiente: Resulta que estoy estudiando acerca de las sesiones en PHP y estoy ...
  #1 (permalink)  
Antiguo 08/09/2016, 10:35
 
Fecha de Ingreso: febrero-2008
Mensajes: 29
Antigüedad: 16 años, 1 mes
Puntos: 0
¿Está bien hecha esta consulta? Tengo Dudas

Foreros hola, espero que se encuentren muy bien. Mi pregunta es la siguiente:

Resulta que estoy estudiando acerca de las sesiones en PHP y estoy haciendo un sistema de logueo en el cual el usuario pueda entrar con su nombre de usuario o su email, obviamente ingresando su password. El campo de texto para ese usuario o email lo llame "login" y en el script de logueo lo almacene en una variable $_POST con el mismo nombre. Yo lo que deseo hacer es que al consultar la base de datos se me verifique si el usuario o email existen ahi y la contraseña es correcta, entonces se me incie la sesión. La consulta que hice fue esta. ¿Está correcta? O cómo la debo hacer

Código:

Código:
$sql = "SELECT * FROM prusuarios WHERE (usuario='$login' XOR email='$login') AND pass='$pass'";
Muchísimas gracias por su ayuda.
  #2 (permalink)  
Antiguo 08/09/2016, 11:17
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿Está bien hecha esta consulta? Tengo Dudas

Hola basura1973:

En realidad la consulta es correcta, sin embargo hay algunos detalles que debes considerar.

1. Como buena práctica, trata de evitar los SELECT * en tus consultas, en lugar de esto lista todos los campos que realmente vas a necesitar. Incluso si fuera el caso y en realidad necesitas TODOS los campos de tu tabla (cosa que muy rara vez ocurre) es mejor listar la totalidad de los campos a poner el comodín asterisco (*).

2. Mucho ojo con el operador XOR, ya que no es lo mismo que el operador OR... no sé como tienes organizados tus datos, pero si fuera el caso y tanto tu campo USUARIO como tu campo LOGIN tuvieran el mismo valor, el resultado de XOR es FALSO (Sería algo como en el primer caso de este ejemplo):

Código MySQL:
Ver original
  1. mysql> SELECT 1 XOR 1;
  2.         -> 0
  3. mysql> SELECT 1 XOR 0;
  4.         -> 1
  5. mysql> SELECT 1 XOR NULL;
  6.         -> NULL
  7. mysql> SELECT 1 XOR 1 XOR 1;
  8.         -> 1

Observa la diferencia con el operador OR:

Código MySQL:
Ver original
  1. mysql> SELECT 1 OR 1;
  2.         -> 1
  3. mysql> SELECT 1 OR 0;
  4.         -> 1
  5. mysql> SELECT 0 OR 1;
  6.         -> 1
  7. mysql> SELECT 0 OR 0;
  8.         -> 0

3. Finalmente, dado que estás utilizando variables para construir tu sentencia SQL, debes verificar antes que estas tengan un valor, de lo contrario el resultado puede ser incierto.

Saludos
Leo.
  #3 (permalink)  
Antiguo 08/09/2016, 11:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 29
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: ¿Está bien hecha esta consulta? Tengo Dudas

Leo excelente la explicación mi hermano, te cuento que había acabado de hacer un script de prueba y me funcionó perfectamente. Pero no sabía acerca de las aclaraciones que me hiciste y me pareció demasiado importante e interesante. De hecho me pusiste a consultar y encontré que OR, significa "y/o" y XOR, significa "o" lo que quiere decir que a pesar de ser muy similares pueden llevarlo a uno a cometer un error en la cconsulta si no la usamos de forma adecuada. De verdad mil y mil gracias mi hermano por tu colaboración, ya te dejé mmi voto en agradecimiento. Un abrazo para vos.

Etiquetas: campo, dudas, php, select, sql
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 06:59.