使用pdo类不会返回任何东西

时间:2014-08-04 21:02:29

标签: php mysql pdo

我从网上得到了一个pdo课程。现在,当我想在auth类中使用它时,我收到了任何结果。下面我把我的pdo的一些功能。

public function query($query){
    $this->stmt = $this->dbh->prepare($query);
}

//binds the inputs with the placeholders we put in place
public function bind($param, $value, $type = null){
    if (is_null($type)) {
        switch (true) {
            case is_int($value):
                $type = PDO::PARAM_INT;
                break;
            case is_bool($value):
                $type = PDO::PARAM_BOOL;
                break;
            case is_null($value):
                $type = PDO::PARAM_NULL;
                break;
            default:
                $type = PDO::PARAM_STR;
        }
    }
        //$this->stmt->bindValue($param, $value, $type);
        $this->stmt->bindParam($param, $value, $type);
}

//executes the prepared statement
public function execute(){
    return $this->stmt->execute();
}

// returns an array of the result set rows
public function resultset(){
    $this->stmt->execute();
    return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}

// returns a single record from the database
public function resultRow(){
    $this->stmt->execute();
    return $this->stmt->fetch(PDO::FETCH_ASSOC);
}

然后我在auth类的登录功能中使用它。

public function login($user, $password){
//$pdo is a new of database class!
$pdo->query("SELECT user,pass FROM users WHERE user = ':user' , pass = ':pass'");     
$pdo->bind(':user', $user);
$pdo->bind(':pass', $password);
$result = $pdo->resultRow();
if($result == true) { //do sth
   return true;
}
else return false;
}

它返回false!由于这是我第一次在php项目中使用pdo,我对使用它有点困惑。

怎么了?

2 个答案:

答案 0 :(得分:2)

不需要在占位符周围使用''。这是占位符的重点。移除'':user周围的:pass。您提供的SQL无效(除此之外,您使用,代替AND加入WHERE语句的两个部分。

通过将PDO::ATTR_ERRMODE设置为PDO::ERRMODE_EXCEPTION,您还可以将PDO置于更合适的调试模式。这使得调试任何SQL问题变得更容易。

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

此外,我还想评论一下当前" PDO类中的语句不是一个非常灵活的解决方案,并且会导致打开数据库句柄的泄漏。对于resultRow的实现,泄漏游标也是如此。对于小型Web请求,这可能不是问题,但如果您尝试在更持久的应用程序中重用此代码,则会遇到问题。

暂时坚持使用标准PDO可能会更好。

答案 1 :(得分:0)

您的PDO语法可以,所以请检查您的$ user和$ password以及与DB的连接。

另外,使用AND代替昏迷会更好。