PDA

Ver la Versión Completa : Consulta SQL con MD5 en PostgreSQL


halizia
02-08-2006, 13:44:55
hola de nuevo :o

me da error una consulta en php con la base de datos postgre, lo que quiero hacer es la autenticación de usuarios, para ello cifro la clave con md5 :



$encripta=md5($pass);
$consulta="select count(*) from ml_users where username=".$user."AND password=".$encripta;
$result=pg_query($database,$consulta);
$fila=pg_fetch_row($result);
if ($fila[0]>1){
echo "te has identificado correctamente<br>";
}else{
echo("no te has identificado correctamente<br>");



el error que me da es este: Warning: pg_query(): Query failed: ERROR: syntax error at or near "password" at character 53


Gracias :)

dec
02-08-2006, 13:58:41
Hola,

Parece un problema con cómo se recibe la consulta: creo que algunas comillas sobran y otras faltan. Prueba con algo como esto:


$consulta = "SELECT COUNT(*) FROM ml_users
WHERE (username = '$user' AND password = '$encripta');";

D-MO
02-08-2006, 14:01:05
Talvez ayudaría ponerle las comillas a los datos.
Ej:
$consulta="select count(*) from ml_users where username='".$user."'AND password='".$encripta."'";

Saludos.

Jejeje// Un poco tarde según me parece.

Saludos David.

dec
02-08-2006, 14:09:12
Hola,

El caso es que no es necesario "partir y unir" la cadena con la sentencia SQL, puesto que desde el momento en que esta se encierra entre comillas dobles, las variables serán expandidas por PHP correctamente. Es decir, que puede hacerse esto perfectamente:


$consultaSql = "SELECT nombre FROM usuarios WHERE id = '$nombre';";


La variable "$nombre" se expandirá sin problemas, no tenemos que partir y volver a unir la cadena con la consulta SQL, con lo que eso significa en cuanto a legibilidad de la consulta, entre otras cosas.

Lo que sí creo que es importante es encerrar entre comillas simples la variable "$nombre", puesto que de otro modo la consulta puede terminar sintácticamente incorrecta, que es lo que le está ocurriendo al compañero.

¡Saludos! :)

Emilio
02-08-2006, 20:02:17
$encripta=md5($pass);
$consulta="select count(*) from ml_users where username=".$user."AND password=".$encripta;



Con lo que haces, el valor de $consulta será algo parecido a esto...


select count(*) from ml_users where username=fulanito ANDpassword=mipassword


Cualquier motor SQL va a quejarse con semejante cadena, te sugiero esto...


$encripta=md5($pass);
$consulta="select count(*) from ml_users where username='$user' AND password='$encripta';