まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 2006-06-14 (水) 2006-06-18 (日) > 最新


2006-06-17 (土)

Ethna で PDO を使うサンプル (2)

以前書いたサンプルだが、 AppManager クラスを継承させた方が楽 (というか、そうすべき)だと分かったので、 こんな風に書き直していた。

<?php

class Sample_UserManager extends Ethna_AppManager
{
    function auth($mailaddress, $password)
    {
        $sql = 'SELECT password FROM user WHERE email=?';

        $dbh =& $this->backend->getDB();
        $stmt = $dbh->prepare($sql);
        $stmt->bindparam(1, $mailaddress);
        $stmt->execute();
        $md5pass = $stmt->fetchcolumn();
        $stmt->closeCursor();
        if ($md5pass != md5($password)) {
            return Ethna::raiseNotice('パスワードが違います', E_SAMPLE_AUTH);
        }
        return 0;
    }
}

?>

つまり、データベース接続用のオブジェクトを、

$dbh =& $this->backend->getDB();

とすることで得ていた。

ところで、Ethna_AppManager クラスには $db というプロパティがある。 この $db は $this->backend->getDB(); を実行するまで 設定されないと思っていたのだが、 よく調べると、コンストラクタの中で間接的に getDB() を呼んでいた。 ということで、getDB() を自分でいちいち呼びだす必要は無い。 コードも以下のようにすっきりと書ける。

<?php

class Sample_UserManager extends Ethna_AppManager
{
    function auth($mailaddress, $password)
    {
        $sql = 'SELECT password FROM user WHERE email=?';

        $stmt = $this->db->prepare($sql);
        $stmt->bindparam(1, $mailaddress);
        $stmt->execute();
        $md5pass = $stmt->fetchcolumn();
        $stmt->closeCursor();
        if ($md5pass != md5($password)) {
            return Ethna::raiseNotice('パスワードが違います', E_SAMPLE_AUTH);
        }
        return 0;
    }
}

?>

ただし、試してはいないが、 リードオンリーで接続したいとかいう場合は、 改めて getDB() を使ってデータベース接続するのだと思う。

Tags: Ethna | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のリンク元

編集