6

尝试将数据库上的值与表单中传递的值进行匹配以检查用户是否存在时,出现以下错误。

可捕获的致命错误:PDOStatement 类的对象无法转换为字符串

这是我正在使用的代码:

//Check users login details
    function match_login($username, $password){
            //If the button has been clicked get the variables
            try{

                $dbh = new PDO("mysql:host=localhost;dbname=mjbox","root", "usbw");

            } catch( PDOException $e ) {

                echo $e->getMessage();

            }
            $stmt = $dbh->prepare("SELECT * FROM mjbox WHERE username=? AND password=?");
            $stmt->bindParam(1, $username);
            $stmt->bindParam(2, $password);
            $stmt->execute();

            $result = mysql_query($stmt);
            if( mysql_num_rows($result) > 0 ){

                echo 'There is a match!';
            }else{
                echo 'nooooo';
            }
    }
4

2 回答 2

7

mysql_query()和 PDO 不兼容,不能一起使用。您正在尝试将mysql_query()需要字符串的 PDO 语句对象传递给该对象。相反,您想$stmt通过 PDO 的一种获取方法从其中获取行,或者使用以下命令检查返回的行数rowCount()

$stmt = $dbh->prepare("SELECT * FROM mjbox WHERE username=? AND password=?");
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);

if ($stmt->execute()) {

  // get the rowcount
  $numrows = $stmt->rowCount();
  if ($numrows > 0) {
    // match
    // Fetch rows
    $rowset = $stmt->fetchAll();
  }
  else {
    // no rows
  }
}
于 2012-06-02T12:38:39.067 回答
1

MySQL 和 PHP5/PDO 不能很好地返回行数。在你的新 PDO() 之后,发出:

$dbh->setAttribute(PDO::MYSQL_ATTR_FOUND_ROWS, true);   

然后发出您的查询...

$stmt = $dbh->prepare("SELECT * FROM mjbox WHERE username=? AND password=?");
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);
$stmt->execute();

// number of rows returned
if($stmt->rowCount()){
    // ... matches
}else{
    // .. no match
}

否则,您的 rowCount 将是 bool 0 或 null/throw 错误。

于 2012-06-02T13:58:07.700 回答