首页 文章

PDO获取(PDO :: FETCH_ASSOC)不返回值

提问于
浏览
-1

首先,这与 Login. 有关

我正在尝试将数据库中的值存储到我的$ _SESSSION变量中 . 首先,我尝试选择username = user和password = password等所有行 .

如果它返回> 0,那么我试图获取(PDO :: FETCH_ASSOC)以获取它的行 . 问题是,虽然它返回> 0,但 FETCH_ASSOC 不会将值返回给我 .

这是我到目前为止所尝试的内容 .

<?php
if(isset($_POST['btn_Save'])){
  $uname  = $_POST['username'];
  $pword  = $_POST['password'];
  $q = "SELECT * FROM `users` WHERE `username` = :username AND `password` = :password";
  $sql = $db->prepare($q);
  $sql->bindParam(":username",$uname);
  $sql->bindParam(":password",$pword);
  $sql->execute();
  $rows = $sql->fetch(PDO::FETCH_NUM);
  if($rows > 0){
  $rows2 = $sql->fetch(PDO::FETCH_ASSOC);
  echo $rows2['userID'];
    $_SESSION['account'] = $rows2['userID'];
    $_SESSION['name']    = $rows2['firstName'];
 //echo" <meta http-equiv='refresh' content='0;url=index.php'>";
  }
  else{
    echo"<script>alert('No user found!');</script>";
   // echo" <meta http-equiv='refresh' content='0;url=index.php'>";

  }

1 回答

  • 0

    PDO::FETCH_NUM:

    返回从结果集中返回的列号索引的数组,从第0列开始

    因此无法将您的数组与下面的if条件进行比较

    $rows = $sql->fetch(PDO::FETCH_NUM);
    if($rows > 0){
    

    在您的代码中,您正试图 fetch data two times . 你可以一次性完成

    用它作为

    $q = "SELECT * FROM `users` WHERE `username` = :username AND `password` = :password";
    $sql = $db->prepare($q);
    $sql->bindParam(":username", $uname);
    $sql->bindParam(":password", $pword);
    $sql->execute();
    
    $rows2 = $sql->fetch(PDO::FETCH_ASSOC);
    if (count($rows2) > 0) {
        $_SESSION['account'] = $rows2['userID'];
        $_SESSION['name'] = $rows2['firstName'];
        //echo" <meta http-equiv='refresh' content='0;url=index.php'>";
    } else {
        echo"<script>alert('No user found!');</script>";
        // echo" <meta http-equiv='refresh' content='0;url=index.php'>";
    }
    

    阅读rowCount

    另外,您将普通密码存储到数据库中

    读密码散列技术

    http://php.net/manual/en/function.password-hash.php

    http://php.net/manual/en/faq.passwords.php

相关问题