Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP PDO登录帐户 不要将pdo和mysql\uu函数混合在一起。从未! 不要以纯文本形式存储密码。从未!相反,试试看! 第一:_Php_Mysql_Pdo - Fatal编程技术网

PHP PDO登录帐户 不要将pdo和mysql\uu函数混合在一起。从未! 不要以纯文本形式存储密码。从未!相反,试试看! 第一:

PHP PDO登录帐户 不要将pdo和mysql\uu函数混合在一起。从未! 不要以纯文本形式存储密码。从未!相反,试试看! 第一:,php,mysql,pdo,Php,Mysql,Pdo,是要取代 $row=mysql\u fetch\u数组($query) 与 $query->fetchAll(PDO::FETCH\u ASSOC) 第二: session\u start()应该出现在脚本顶部,而不是函数内部 第三: 是要取代 <?php session_start(); function login($database, $username, $password) { $query = "SELECT * FROM `users` WHERE username='

是要取代

$row=mysql\u fetch\u数组($query)

$query->fetchAll(PDO::FETCH\u ASSOC)

第二:
session\u start()
应该出现在脚本顶部,而不是函数内部

第三: 是要取代

<?php
session_start();


function login($database, $username, $password) {

$query = "SELECT * FROM `users` WHERE username=':username'";
$query = $database->prepare($query);

$query->execute(array(':username' => $username));

    if($query->rowCount()){
        $row = $query->fetch();
        echo $row;
        $dbPass      = $row["password"];


            if($password == $dbPass){

                $dbId        = $row["id"];
                $dbUser      = $row["username"];
                $dbEmail     = $row["email"];
                $dbFirstname = $row["firstname"];
                $dbLastname  = $row["lastname"];

                        //Register Session Variables
                $_SESSION['id']        = $dbId;
                $_SESSION['username']  = $dbUser;
                $_SESSION['email']     = $dbEmail;
                $_SESSION['name']      = $dbFirstname." ".$dbLastname;

                return true;

            } else {
                return false;
            }
    } else {
        return false;
    }
}

?>
为此:

if($query->rowCount()){}

第四: 这太糟糕了

   $rowcount = $query->rowCount();
   if($rowcount == 1){
     //
   }
始终使用完整的分隔符。你正在灌输一种糟糕的编码习惯,这会让你终生困扰

简单的做法

           return true;

            } else
                return false;
    } else
        return false;
}
第五: ~z~不太好,但肯定比你的方法好

if($foo){
    if(){
       //do something
    }else if{
       //do something
    }else{
       //do something
    }
}
编辑 既然你似乎非常喜欢你的代码,我就按照你的方式来做。试试这个:

function small_query(pdo $pdo, $query, array $value){
    $stmt = $pdo->prepare($query);
    $stmt->execute($value);
    return $stmt->fetchAll(); 
}

$pdo = new PDO('mysql:host=localhost; dbname=foo', 'root', 'pass'); 

$result = small_query($pdo, "SELECT * FROM users WHERE name = ?", array($_POST['name']))

我知道我在if语句之后使用了mysql()代码,但我现在的问题是,我甚至无法获得运行if语句的代码。你不能这样混合使用它们。
显然它没有完全转换为PDO
-将此作为一个问题发布是毫无意义的。除了给出的答案,删除引号
WHERE username=':username';
作为旁白,你应该散列你的密码。我重复一遍:不要将pdo和mysql_uu函数混合在一起。永远不要!爱它你确定你不想在
Fifth:
?@TheBlueDog中编辑函数谢谢。我有一双懒散的眼睛:)你也错过了
WHERE username=':username'关于“为什么”;-)另外,OP使用纯文本密码存储。我使用了
占位符。更快。
function small_query(pdo $pdo, $query, array $value){
    $stmt = $pdo->prepare($query);
    $stmt->execute($value);
    return $stmt->fetchAll(); 
}

$pdo = new PDO('mysql:host=localhost; dbname=foo', 'root', 'pass'); 

$result = small_query($pdo, "SELECT * FROM users WHERE name = ?", array($_POST['name']))
<?php

    session_start();

    function login($database, $username, $password){
        $query = "SELECT * FROM users WHERE username = ?";
        $stmt  = $database->prepare($query);
        $stmt->execute(array($username));

        if($stmt->rowCount()){
            $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

            $_SESSION["id"] = $result["id"];
            $_SESSION["username"] = $result["username"];
            $_SESSION["email"] = $result["email"];

            return true; 
        }else{
            return false; 
        }
    }