PDO计算用户名匹配的行

时间:2012-07-03 15:23:18

标签: php oop class pdo return

我正在尝试匹配数据库中的用户名。如果用户名匹配,则返回true,否则返回false。

即使用户名正确,它也总是会返回false。

以下是我正在使用的课程和电话:

class register{
  private $result;

  public function __construct($post_data, PDO $dbh){

    $this->post_data = array_map('trim', $post_data);
    $this->dbh = $dbh;

  }

  public function checkUsername(){
    $stmt = $this->dbh->prepare("COUNT(*) FROM oopforum_users WHERE username = ?");
    $stmt->bindParam(1, $this->post_data['reg_username'], PDO::PARAM_STR);
    $stmt->execute();
    $this->result = $stmt->rowCount();
    if($this->result == 0){
        return false;
    }else{
        return true;
    }
  }

}


$register = new register($_POST, $dbh);
if($register->checkUsername()){
    //continue
}else{
    echo 'ERROR: That username is taken, please choose another one.';
}

为什么即使用户名匹配也会返回false?

1 个答案:

答案 0 :(得分:4)

您忘记了SELECT声明:

$stmt = $this->dbh->prepare("SELECT COUNT(*) FROM oopforum_users WHERE username = ?");

除此之外,您的查询将始终返回一行(正好是1行),但该行的内容可能包含行数为0,因此您需要更改逻辑:选择实际列而不是{ {1}}并使用COUNT(*)或读取计数值并检查。