我将此登录脚本更改为PDO。现在它传递了用户名,但得到了fetchAll行。我需要帮助。感谢
<?php
session_start();
include_once"includes/config.php";
if (isset($_POST['admin_login'])) {
$admin_user = trim($_POST['admin_user']);
$admin_pw = trim($_POST['admin_pw']);
if ($admin_user == NULL OR $admin_pw == NULL) {
$final_report.="Please complete all the fields below..";
} else {
$check_user_data = $db->prepare("SELECT * FROM `admin`
WHERE `admin_user`='$admin_user'");
$check_user_data->execute();
if ($check_user_data->fetchColumn() == 0) {
$final_report.="This admin username does not exist..";
} else {
$get_user_data = $check_user_data->fetchAll($check_user_data);
if ($get_user_data['admin_pw'] == $admin_pw) {
$start_idsess = $_SESSION['admin_user'] = "".$get_user_data['admin_user']."";
$start_passsess = $_SESSION['admin_pw'] = "".$get_user_data['admin_pw']."";
$final_report.="You are about to be logged in, please wait a few moments...";
header('Location: admin.php');
}
}
}
}
?>
答案 0 :(得分:2)
不检查false
的返回值prepare()或execute()。你需要检查SQL错误并处理它们,停止代码而不是继续下去。
在预准备语句中不使用查询参数,仍然不安全地将$ _POST内容插入到查询中。您错过了切换到PDO的好处,并且让自己容易受到SQL注入攻击。
您以明文形式存储密码,这是不安全的。请参阅You're Probably Storing Passwords Incorrectly。
如果您只使用admin_pw列,是否真的需要SELECT *
?提示:没有。
PDOStatement::fetchAll()返回一个数组数组,而不只是一行数组。阅读fetchAll()文档中的示例。