2

データベース内のユーザー名を一致させようとしています。ユーザー名が一致する場合は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が返されるのはなぜですか?

4

1 に答える 1

4

SELECTあなたは声明を忘れました:

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

それとは別に、クエリは常に1行(正確に1行)を返しますが、その行の内容には行数に0が含まれる可能性があるため、ロジックを変更する必要があります。代わりに実際の列を選択してCOUNT(*)使用する$stmt->rowCount()か、読み取りますカウントの値を確認します。

于 2012-07-03T15:25:09.140 に答える