2013-12-10 63 views
0

我是新来的MySQL,所以任何帮助,将不胜感激。 我已经写了下面的函数来从电子邮件和密码匹配的数据库中提取用户标识,但它不起作用。如果我把我的信息,它返回一个用户ID为0,我的用户ID是19.Mysql登录 - 选择条目

function correctPassword($db, $userID, $password){ 
    $sql = "SELECT user_id FROM event_user WHERE user_email = '$userID' AND user_password = md5('$password')"; 
    $_SESSION['userId'] = mysql_query($sql, $db); 
    if ($_SESSION['userId'] != 0) 
     return TRUE; 
    else 
     return FALSE; 
} 

您的任何建议专业人士?

+0

MD5函数调用不正确 –

+1

现在您已经开始学习Mysql了,我强烈建议您从头开始学习如何使用Prepared Statements。通过使用mysql_函数,您可以让应用程序对SQL注入打开。 http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/。 – raygo

回答

0

试试这个

function correctPassword($db, $userID, $password){ 
    $sql = "SELECT user_id FROM event_user WHERE user_email = '$userID' AND user_password = '" . md5($password) . "'"; 
    $_SESSION['userId'] = mysql_query($sql, $db); 
    if ($_SESSION['userId'] != 0) 
     return TRUE; 
    else 
     return FALSE; 
} 
+0

这与我所调用的md5中的更改除外相似。我试过这个,我仍然得到一个0的用户ID。任何其他的想法? – user3088720

+0

是咸鱼的密码?用户名是真正的用户邮箱吗?是mysql_query返回一个整数吗?你问的是mysql_query!= 0的结果,它可能不会返回结果,而是返回结果的资源。尝试var_dump(mysql_query($ sql,$ db));你看到了什么? – robbmj

+0

我不知道你说的是什么意思。用户标识实际上是一个电子邮件地址。 – user3088720

0

添加该功能的连接,还请求mysql_query返回资源类型,所以你不能老是把在SESSION

function correctPassword($db, $userID, $password){ 
    global $db; 
    $sql = "SELECT user_id FROM event_user WHERE user_email = '$userID' AND user_password = '" . md5('$password') . "'"; 
    $result = mysql_query($sql, $db); 
     $row=mysql_fetch_assoc($result); 
     $_SESSION['userId']=$row['userId']; 
    if (isset($_SESSION['userId'])){ 
     return TRUE; 
    }else{ 
     return FALSE; 
    } 
} 

忽略SQL医生准备注射。

+0

你是什么意思的连接? $ db连接到我的数据库。 – user3088720

+0

变量,其中主机,用户,密码,就像$ blah = mysql_connect(blah ....) – Mihai

+1

这就是$ db为我做的。 – user3088720

0

我在这样的代码所做的一些常见的错误是:

1)不宜与session_start()启动会话。

2)不能转义单引号。 MySQL不喜欢单引号,并且不会介意如果找到一个,就打断你的查询。