简体   繁体   English

PDO提取与行数

[英]PDO fetch vs rowcount

I'm having a practice in creating a login script in PHP using PDO, but have run into a slight problem. 我正在使用PDO在PHP中创建登录脚本的实践,但是遇到了一个小问题。 I've got it to check if data is in the fields, but unsure of how to check if the username and password combination is correct. 我已经检查了数据是否在字段中,但是不确定如何检查用户名和密码组合是否正确。 This is a snippet of checking the username and password: 这是检查用户名和密码的摘要:

# if data is valid, check against values held in the database
if ($valid) {
    $sql = 'SELECT COUNT(*) FROM authors
    WHERE email = :email AND password = :password';

    $s = $dbConnection->prepare($sql);
    $s->bindValue(':email', $email);
    $s->bindValue(':password', $password);
    $s->execute();

    $row = $s->fetch();

    if($row==1){
        echo "ok";
    }else{
        echo "no";
    }
}

When I put in any combination for username and password I get the output for false (ie echo 'no'). 当我输入用户名和密码的任何组合时,我得到的输出为false(即echo'no')。 Could someone give me a hand please? 有人可以帮我吗?


UPDATE: Snippet modified 更新:代码段已修改

I've used password_verify, but I still have the same result: 我使用过password_verify,但结果仍然相同:

// if data is valid, check against values held in the database
if ($valid) {
    $sql = 'SELECT * FROM author
    WHERE email = :email';

    $s = $dbConnection->prepare($sql);
    $s->bindValue(':email', $email);
    $s->execute();

    $row = $s->fetch();
    var_dump($row);

    if(count($row) > 0 && password_verify($password, $row['password'])){
        echo 'ok';
        exit;
    }else {
        echo 'Username and Password are not found';
    }
}

var_dump of incorrect data: var_dump的数据不正确:

bool(false) Username and Password are not found

var_dump of correct data: 正确数据的var_dump:

array(4) { ["id"]=> string(1) "3" ["name"]=> string(7) "a@a.com" ["email"]=> string(7) "a@a.com" ["password"]=> string(1) "a" } Username and Password are not found

got it sorted. 得到排序。 solution i used was: 我使用的解决方案是:

# if data is valid, check against values held in the database and then action as appropriate
if ($valid) {
    $sql = 'SELECT id, email, password FROM author
    WHERE email = :email AND password = :password';

    $s = $dbConnection->prepare($sql);
    $s->bindValue(':email', $email);
    $s->bindValue(':password', $password);
    $s->execute();

    $data = $s->fetch();
    if($data != NULL){
        $_SESSION['loggedIn'] = TRUE;
        $_SESSION['email'] = $email;
        $_SESSION['id'] = $data['id'];
        header('Location:../admin/');
        exit;
    }else{
        unset($_SESSION['loggedIn']);
        unset($_SESSION['email']);
        unset($_SESSION['id']);
        echo 'Incorrect username/password combination';
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM