-1

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

1 回答 1

2
  • 不检查返回值 prepare() 或 execute() false。您需要检查 SQL 错误并处理它们,停止代码而不是继续愉快地继续。

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

  • 您以明文形式存储密码,这是不安全的。请参阅您可能错误地存储了密码

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

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

于 2012-11-29T00:25:43.870 回答