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;
}
}