<?php
function login($database, $username, $password) {
$query = "SELECT * FROM `users` WHERE username=':username'";
$query = $database->prepare($query);
$query->execute(array(':username' => $username));
$rowcount = $query->rowCount();
if($rowcount == 1){
$row = mysql_fetch_array($query);
$dbPass = $row["password"];
if($password == $dbPass){
session_start();
$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;
}
?>这是一个PHP代码片段,来自我正在全局转换为PDO的一个项目。这是登录页面的functions.php文件。显然,它没有完全转换为PDO,所以不要批评它,但是基本上在login.php文件中,我让它访问这个方法,并从表单中传递数据库(这是必需的)、用户名和密码。我设置了一个基本的查询,以查找具有表单用户名输入的所有用户。然后我准备,并执行查询。然后我需要一个行计数,所以我在查询上设置了一个运行rowCount()方法的rowCount变量,但是代码并没有移动到那里。当我回显它时,行计数是== 0,因此它不会继续执行下面的if语句。我是不是做错了PDO什么的?或者rowCount()。我怀疑我可能调用rowCount()太晚了,所以我尝试在执行$query之前将其向上移动,但没有成功。谢谢!
___EDIT___
<?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;
}
}
?>发布于 2014-04-25 20:55:49
不要将pdo和mysql_函数混合在一起。绝不可能!
不要将password存储在纯文本中。绝不可能!相反,试试康帕特!
第一:
是要取代
$row = mysql_fetch_array($query);
使用
$query->fetchAll(PDO::FETCH_ASSOC)
第二:
session_start()应该出现在脚本的顶部,而不是在函数中。
第三:
是要取代
$rowcount = $query->rowCount();
if($rowcount == 1){
//
}在这方面:
if($query->rowCount()){}
第四:
这太糟了!
return true;
} else
return false;
} else
return false;
}始终使用完整的分隔符。你在灌输一种恶习,这将永远困扰着你。
简单do
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']))编辑。
既然你似乎非常喜欢你的代码,我就按你的方式做了。试试这个:
<?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;
}
}https://stackoverflow.com/questions/23302767
复制相似问题