2012-04-09 10 views
1

私はPDO::FETCH_INTOモードがPDOStatement::fetch()内では動作しませんフェッチ気づいたが、manualで、それはあなたがPDOStatement::fetch()PDO::FETCH_INTOを使用することができると言います。明確化::フェッチ()

私はやってみました: $ query-> fetch(PDO :: FETCH_INTO、$ user);

これが返されます。PDOStatement::fetch() expects parameter 2 to be long, object given

はそれはマニュアルが誤解を招くの一種であるわけではないでしょうか?この場合、PDO::FETCH_INTOを使用する正しい方法は何でしょうか?

+0

エラーメッセージは非常に自明ですが、機能を間違って使用しています。 http://www.php.net/manual/en/pdostatement.fetch.php#78794をご覧ください。 – DCoder

+0

fetch()はPDOStatementクラスに属します。私はちょうどタイプミスだと思っているので、修正するための質問を編集しました。 –

+0

@ÁlvaroG.Vicarioああ、ありがとう。 – Tek

答えて

1

を:

$stmt->setFetchMode(PDO::FETCH_INTO, $user); 
$user = $stmt->fetch(); 

はUPDATE:

あなたは(推奨)、公共セッターとのプライベート/保護された性質を持っている場合パブリックプロパティの代わりにFETCH_CLASSを使用してください。

class User { 
    protected $username; 

    public setUsername($username) { 
     $this->username = $username; 
    } 
... 
} 
... 
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User'); 
$user = $stmt->fetch(); 

UPDATE 2:

class User { 
    protected $username; 
... 
} 
... 
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User'); 
$user = $stmt->fetch(); 
:PDOを使用して

:: FETCH_CLASS、あなたもセッター(:IDフィールドのために良いですPDO、用セッターを必要としないEDIT)を必要としません

更新3:完全な例をここに見てください:http://pastebin.com/LneAj0xn

+0

偉大な、それは動作、並べ替え。今私は '私有財産にアクセスできません。 'を得ています。この回答によると、動作する必要があります:http://stackoverflow.com/questions/7282962/php-pdo-do-the-fetch-styles-fetch-class-and-fetch-into-fetch-into-private-objecまたは答えは間違っていますか? – Tek

+0

設定しようとしているプラ​​イベートプロパティのセッターを定義しようとします。 setUsername() または、__set()メソッドを追加することはできますが、それは避けてください。 –

+0

UPDATE:リンクされたPDO :: FETCH_CLASSが使用され、PDO :: FETCH_INTOは使用されません。呼び出しの前に$ userオブジェクトを初期化すると、動作が異なる場合があります。 '$ stmt-> setFetchMode(PDO :: FETCH_CLASS、 'User');' –

0

PDOStatement :: fetch()の第2引数はcursor_orientationであることに注意してください。

あなたは、おそらくこのような何かしたい:この方法を試してみてください

$user = $query->fetch(PDO::FETCH_INTO); 
+0

私はすでにこれを試しました。 'PDO :: FETCH_INTO'を単独で使用するとPDO例外が発生します:'フェッチされたオブジェクトが指定されていません ' – Tek

+0

が確認されました。私はそれがちょうどサポートされていないことには驚かないだろうが、それを調べるだろう。 –