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 ステートメント オブジェクトを渡そうとしています。代わりに、$stmtPDO のフェッチ メソッドのいずれかを使用して行をフェッチするか、次のコマンドで返される行数を確認します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 に答える