我无法比较客户端和数据库登录的匹配密码


i cannot compare matching passwords client and database for login?

我使用下面的代码登录。

$sid = trim($_POST["id"]);
$pcode = trim(md5($_POST["pcode"]));
include_once "../conf.php";
$pdo = connect();
$sql_log = "select * from `manager` where `sid` = $sid limit 1";
$do_log = $pdo->prepare($sql_log);
$do_log->execute();
$num_log = $do_log->rowCount();
if($do_log){
    if($num_log == 1){
        while($row_log = $do_log->fetch()){
            $pcode_db = $row_log["pcode"]; //md5 password
        }
            if(var_dump($pcode == $pcode_db)){ //or $pcode == $pcode_db, both return false
                return true;
            }else{
                return false; // i get false for any password}
        }
    }
}

我无法登录正确的密码!使用phpmyadmin

手动设置md5密码

我不知道为什么会这样,但它确实做到了。我设置md5密码(做md5与PHP)在我的数据库手动与phpMyAdmin(插入)!

structure column pcode >>varchar(32)

md5密码有32个字符,但是当它在phpMyAdmin中插入时,pcode列只包含31个字符…所以我在phpMyAdmin中使用SQL来设置md5密码!

update `manager` set `pcode` = MD5("my password") where `sid` = 7283

,然后完全设置为32个字符。有人能解释一下为什么会这样吗?

使用phpmyadmin手动设置md5密码

MySQL MD5与PHP MD5算法不同。

下面的代码就像你的代码一样,但是sql查询有一点变化

$sid = trim($_POST["id"]);
$pcode = trim(md5($_POST["pcode"]));
include_once "../conf.php";
$pdo = connect();
$sql_log = "select * from `manager` where `sid` = $sid and `pcode` = $pcode";
$do_log = $pdo->prepare($sql_log);
$do_log->execute();
if($do_log){ // if incoming sid and pcod will match
   return true;
}else{
   return false; 
}

我不知道如何使用你的connect()函数。另一种连接sql的方式如下:

 $sid = trim($_POST["id"]);
 $pcode = trim(md5($_POST["pcode"]));
 include_once "../conf.php";
 mysql_connect('server_name','user_name','password');
 mysql_select_db('DB_name');
 $query = mysql_query("select * from `manager` where `sid` = $sid and `pcode` =  $pcode");
 if(mysql_fetch_array($query)){
    return true;
 }else {
    return false;
    }