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

时间:2016-03-29 06:55:06

标签: php mysql pdo

首先,这与登录。

有关

我正在尝试将数据库中的值存储到$ _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 :(得分: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