PDO登录脚本不起作用

时间:2012-11-29 00:18:30

标签: pdo

我将此登录脚本更改为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');
      }
    }
  }
}
?> 

1 个答案:

答案 0 :(得分:2)

  • 不检查false的返回值prepare()或execute()。你需要检查SQL错误并处理它们,停止代码而不是继续下去。

  • 在预准备语句中不使用查询参数,仍然不安全地将$ _POST内容插入到查询中。您错过了切换到PDO的好处,并且让自己容易受到SQL注入攻击。

  • 您以明文形式存储密码,这是不安全的。请参阅You're Probably Storing Passwords Incorrectly

  • 如果您只使用admin_pw列,是否真的需要SELECT *?提示:没有。

  • PDOStatement::fetchAll()返回一个数组数组,而不只是一行数组。阅读fetchAll()文档中的示例。

相关问题