1

出于某种原因,无论参数是什么以及 SQL 行中的实际内容是什么,以下代码总是返回 true。它还会引发错误“注意:未定义的偏移量:第 7 行 C:\wamp\www\Social Networking\INC\login.inc 中的 0”,但我看不出有什么问题:

<?php
function checkAccount($username, $password){
    include("INC/dbconnect.inc");/*"INC/dbconnect.inc" is <?php $pdo = new PDO("mysql:host=localhost;dbname=socialnetwork","user","123"); ?>*/
    $select = $pdo->prepare("SELECT id,password FROM users WHERE user_username = :username");
    $select->execute(array(':username'=>$username));
    $q_rows = $select->fetchAll();
    if($q_rows[0][0]/*the ID of the user, it should always be greater than 1, if not then the username does not exist*/ > 0 && $q_rows[0][0] != null){
        if($q_rows[0][1]/*the password of the user*/ == $password)
            return true;
        else
            return false;
    }
    else
        return false;
    $pdo=null;
} ?>

有人可以告诉我有什么问题吗?我已经在代码中评论了我遇到的问题,并且我尝试了正常$select->fetch()而不是$select->fetchAll()无济于事。在发布此之前,我已经阅读了 PDO(http://php.net/manual/en/pdostatement.fetchall.php)。这是我的文件http://pastebin.com/YCkrRivs的其余部分,谢谢。

4

2 回答 2

0

如果数据库没有返回任何行,那么就不会有 entry $q_rows[0]。因此,当您尝试检索数组中不存在的行时,未定义的偏移量为 0。对于不存在的用户,您的“ID”不 > 0 不是正确的摘要。

样本返回看起来像这样(如果你 print_r()'d 它)

在场用户:

$q_rows = Array (
  [0] => Array ( 
   [id] => 1,
   [password] => 'dno23n3io3'
  )
)

没有用户在场:

$q_rows = Array (
)

你应该做:

if(size($q_rows) > 0) {
   //Handle user present
} else {
   //Handle no user present
}
于 2012-12-25T01:01:58.903 回答
0

您不需要使用fetchAll,只需使用fetch

$q_row = $select->fetch();

if ($q_row) {
  // do your logic ...
}

你返回的是字符串"true"/"false",而不是布尔值,你应该使用它true/false

更简单,你可以像下面这样:

$q_row = $select->fetch();
return $q_row && $q_row[0] > 0 && $q_row[1] === $password;
于 2012-12-25T01:05:32.823 回答