简体   繁体   English

将 MySQL 登录脚本转换为 PDO

[英]Convert MySQL login script to PDO

I've written a functional login script using MySQL.我已经使用 MySQL 编写了一个功能性登录脚本。 However, I've now been told that it needs to be done using PDO, and I've a functional PDO connection:但是,我现在被告知需要使用 PDO 来完成,并且我有一个功能性 PDO 连接:

function getConnection()
{
    $userName = '*****';
    $password = '*****';
    $dbname = '******';
    $db = new PDO("mysql:host=localhost;dbname=$dbname", $userName, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $db;

However I've no idea how to convert the login query to PDO.但是我不知道如何将登录查询转换为 PDO。

if (isset($_REQUEST['attempt']))
{
    $user = $_POST['user'];
    $password = $_POST['password'];

    $qry = mysql_query
        ("SELECT *
          FROM subscriber
          WHERE email = '$user'
          AND password = '$password'")
        or die(mysql_error());

    $total = mysql_num_rows($qry);

    if ($total > 0)
    {
        session_start();
        $_SESSION['user'] = 'yes';
        header('location: account.php');
        exit;
    }
    else
    {
        // Do nothing.
    }
}

How can I do it?我该怎么做?

To get you started:让您开始:

$db = getConnection();
$stmt = $db->prepare("
    SELECT * FROM subscriber WHERE email = :email AND password = :password
");
$stmt->bindParam(":email"   , $user    );
$stmt->bindParam(":password", $password);
$stmt->execute();
$total = $stmt->rowCount();

Non-bloated version:非臃肿版本:

$stm = $pdo->prepare("SELECT * FROM subscriber WHERE email = ? AND password = ?");
$stm-> execute($_POST['user'], $_POST['password']);
if ($id = $stm->fetchColumn()) {
    session_start();
    $_SESSION['user'] = $id;
    header('location: account.php');
    exit;
}

You can also use this example if you would not like to use bindParam.如果您不想使用 bindParam,也可以使用此示例。 But I extracted it from @eggyal's answer.但我从@eggyal 的回答中提取了它。 Great thanks go to eggyal.非常感谢eggyal。

<?php session_start();
    include_once('pdo.inc.php');

    $username = (isset($_POST['username']))? trim($_POST['username']): '';
    $password = (isset($_POST['password']))? $_POST['password'] : '';
    $pas = md5($password);
    $redirect = (isset($_REQUEST['redirect']))? $_REQUEST['redirect'] :
        'view.php';
    $query = ("SELECT username FROM site_user WHERE username=:username
              AND password =:password");
    $query_login = $con->prepare($query);
    $query_login->execute(array(
        ':username'=>$username,
        ':password'=>$pas));
    $result = $query_login->rowCount();

    if($result>0)
    {
        $_SESSION['username'] = $username;
        $_SESSION['logged'] = 1;
        echo "success";
    }
    else {
        // Set these explicitly just to make sure
        echo 'User name invalid';
    }
?>

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

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