【问题标题】:PDO count rows where username matchesPDO 计算用户名匹配的行数
【发布时间】:2012-07-03 15:23:17
【问题描述】:

我正在尝试匹配数据库中的用户名。如果用户名匹配,则返回 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?

【问题讨论】:

  • var_dump($this->result); 得到什么?

标签: php oop class pdo return


【解决方案1】:

您忘记了SELECT 声明:

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

除此之外,您的查询将始终返回一行(正好是 1 行),但该行的内容可能包含 0 作为行数,因此您需要更改逻辑:选择一个真实列而不是 @ 987654323@ 并使用 $stmt->rowCount() 或读取计数值并检查。

【讨论】:

  • @crm:为了将来参考,启用 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 以使 PDO 在错误时抛出异常。这将使您更容易立即发现错误。
  • 仍在努力掌握这一点。我尝试了SELECT username$stmt->fetchColumn,但返回错误。
  • @Truth 好主意,但如果没有 try - catch 块,它会起作用吗?
  • @crm 如果你使用SELECT username FROM ...,你应该坚持使用$stmt->rowCount()
  • @jeroen:如果没有 try catch 块,您的程序将会崩溃(致命错误),这将迫使您无论如何都看到错误。在您的示例中,您只需将 try/catch 块包装在方法调用周围(而不是在方法声明本身内)。
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 2015-04-20
  • 1970-01-01
相关资源
最近更新 更多