Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO统计用户名匹配的行数_Php_Oop_Class_Pdo_Return - Fatal编程技术网

Php PDO统计用户名匹配的行数

Php PDO统计用户名匹配的行数,php,oop,class,pdo,return,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 = $db

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

您忘记了
SELECT
语句:

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

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

您忘记了
SELECT
语句:

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

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

当您
var\u dump($this->result)时会得到什么?当你
var\u转储($this->result)时,你会得到什么?@crm:为了将来参考,请启用PDO::ATTR_ERRMODE=>PDO::ERRMODE_异常,使PDO在发生错误时抛出异常。这将使您更容易发现错误。仍在努力掌握这一点。我尝试了
SELECT username
$stmt->fetchColumn
,但返回false。@Truth好主意,但是,如果没有
try
-
catch
块,这会起作用吗?@crm如果使用
selectusername FROM…
你应该坚持使用
$stmt->rowCount()
@jeroen:如果没有try-catch块,你的程序会爆炸(致命错误),这将迫使你看到错误。在您的示例中,您只需将try/catch块环绕在方法调用周围(而不是在方法声明本身内部)。@crm:为了便于将来参考,请启用PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,使PDO在发生错误时抛出异常。这将使您更容易发现错误。仍在努力掌握这一点。我尝试了
SELECT username
$stmt->fetchColumn
,但返回false。@Truth好主意,但是,如果没有
try
-
catch
块,这会起作用吗?@crm如果使用
selectusername FROM…
你应该坚持使用
$stmt->rowCount()
@jeroen:如果没有try-catch块,你的程序会爆炸(致命错误),这将迫使你看到错误。在您的示例中,只需将try/catch块包装在方法调用周围(而不是方法声明本身内部)。