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

时间:2012-06-02 12:36:40

标签: php mysql pdo

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

  

可捕获的致命错误: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';
            }
    }

2 个答案:

答案 0 :(得分:7)

mysql_query()和PDO不兼容,不能一起使用。您正在尝试将PDO语句对象传递给期望字符串的mysql_query()。相反,您希望通过PDO的一个提取方法从$stmt获取行,或者检查使用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
  }
}

答案 1 :(得分: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 error。