我从网上得到了一个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,我对使用它有点困惑。
怎么了?
答案 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代替昏迷会更好。