¤Þ¤È¤á ¥Ö¥í¥° ¥À¥¦¥ó¥í¡¼¥É ·Ç¼¨ÈÄ ¥á¡¼¥ë

¤ì¤Ö¤í¤°

< 2006-05-30 (²Ð) 2006-06-02 (¶â) > ºÇ¿·


2006-05-31 (¿å)

¢£ Ethna ¤Ç PDO ¤ò»È¤¦¥µ¥ó¥×¥ë

ºòÆü¤Î³¤­¡£ PDO¤òEthna¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë»È¤¦ ¤Î¥Ú¡¼¥¸¤ò»²¹Í¤Ë¤·¤Æ¡¢ Ethna ¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤Çºî¤Ã¤¿¥µ¥ó¥×¥ë¤ò¡¢ PDO ¤ò»È¤¦¤è¤¦¤Ë¤·¤Æ¤ß¤ë¡£

Ethna_DB_PDO.php ¤ò¥¤¥ó¥¹¥È¡¼¥ë¡£

# cd /dev/shm
# wget http://dozo.rgr.jp/Ethna_DB_PDO.tar.gz
# tar xvfz Ethna_DB_PDO.tar.gz
# cp Ethna_DB_PDO/class/DB/Ethna_DB_PDO.php /usr/share/php/Ethna/class/DB/

app/Sample_Controller.php ¤Î $class ¤ÎÀßÄê¤ò°Ê²¼¤Î¤è¤¦¤ËÊѹ¹¡£

var $class = array(
    ¡Ä¡Ä
    'db' => 'Ethna_DB_PDO',
    ¡Ä¡Ä
);

¤³¤ÎÃʳ¬¤Ç¤È¤ê¤¢¤¨¤º¼Â¹Ô¤·¤Æ¤ß¤¿¤é¡¢¤³¤ó¤ÊÉ÷¤Ë¸À¤ï¤ì¤¿¡£

Fatal error: Class 'Ethna_DB_PDO' not found in /usr/share/php/Ethna/class/Ethna_Backend.php on line 367

¤Ê¤ó¤Ç¡© ¥¨¥é¡¼¤¬½Ð¤¿ÊÕ¤ê¤Î¥³¡¼¥É¤òÆÉ¤ó¤À¤ê¡¢ grep Ethna_DB_PEAR ¤·¤Æ¤ß¤ë¤È¡¢ /usr/share/php/Ethna/Ethna.php ¤Ë°Ê²¼¤Î¤è¤¦¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¤Î¤òȯ¸«¡£

include_once(ETHNA_BASE . '/class/DB/Ethna_DB_PEAR.php');

¤¢¡¼¡¢·è¤á¤¦¤Á¤·¤Æ¤ë¤Î¤«¡£ app/Sample_Controller.php ¤ÎÊý¤Ç Ethna_DB_PDO.php ¤ò include ¤·¤Æ¤âÎɤ¤¤Î¤À¤í¤¦¤¬¡¢ PEAR::DB ¤Ç¤Ê¤¯ PDO ¥ª¥ó¥ê¡¼¤Çư¤¯¤³¤È¤ò³Îǧ¤·¤¿¤¤¤Î¤Ç¡¢ ¤³¤³¤Ï¤­¤Ã¤Ñ¤ê¤È¡¢ ¾åµ­¤Î²Õ½ê¤ò Ethna_DB_PDO.php ¤ò include ¤¹¤ë¤è¤¦¤Ë½ñ¤­´¹¤¨¤Æ¤·¤Þ¤¦¡£

¤½¤¦¤·¤Æ¡¢¤½¤Î¸å¤â¤¤¤í¤¤¤í¤È»î¹Ôºø¸í¤·¤Æ¤ß¤Æ¡¢ °Ê²¼¤Î¤è¤¦¤Ê¥³¡¼¥É¤Çư¤¯¤³¤È¤ò³Îǧ¤Ç¤­¤¿¡£

<?php

class Sample_UserManager
{
    function auth($db, $mailaddress, $password)
    {
        $sql = 'SELECT password FROM user WHERE email=?';
        $db->prepare($sql);
        $db->execute(array($mailaddress));
        $row = $db->fetch();
        if ($row[0] != md5($password)) {
            return Ethna::raiseNotice('¥Ñ¥¹¥ï¡¼¥É¤¬°ã¤¤¤Þ¤¹', E_SAMPLE_AUTH);
        }
        return 0;
    }
}

?>

¤¿¤À¡¢Æ°¤­¤Ï¤¹¤ë¤Î¤À¤¬¡¢¤É¤¦¤â´üÂÔ¤·¤Æ¤¤¤¿¤Î¤È°ã¤¦¡£

  • execute() ¤È¤« fetch() ¤¬ $db ¤Î¥á¥½¥Ã¥É
  • bindparam() ¤Ê¤É¤Î PDOStatement ¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤¬²¿¤â»È¤¨¤Ê¤¤

¤È¤³¤í¤¬¡¢query() ¥á¥½¥Ã¥É¤ÎÊý¤Î¼ÂÁõ¤ò¸«¤Æ¤ß¤ë¤È¡¢ ¤³¤Á¤é¤Ï PDOStatement ¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤·¤Æ¤¤¤ë¡£ ¾¤Î Ethna_DB_PEAR ¤È¤« Ethna_DB_ADODB ¤ò¸«¤Æ¤â¡¢ query() ¥á¥½¥Ã¥É¤Ï¤½¤Î¥¯¥é¥¹ÆÈÆÃ¤Î·ë²Ì¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤·¤Æ¤¤¤ë¤Î¤Ç¡¢ ñ½ã¤Ë¡¢return ʸ¤Î½ñ¤­Ëº¤ì¡¢¤Ç¤Ï¤Ê¤¤¤«¤È¤¤¤¦µ¤¤â¤·¤Æ¤­¤¿¡£

¤È¤ê¤¢¤¨¤º¡¢prepare() ¥á¥½¥Ã¥É¤Ë¡¢ return $this->stmtObj; ¤Î£±Ê¸¤òÄɲ䷤ơ¢ PDOStatement ¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¤è¤¦¤Ë¤·¤Æ¤ß¤¿¡£ ¤½¤¦¤¹¤ë¤È¡¢¾åµ­¤Î¥×¥í¥°¥é¥à¤Ï°Ê²¼¤Î¤è¤¦¤Ë½ñ¤­Ä¾¤¹¤³¤È¤¬¤Ç¤­¤ë¡£

<?php

class Sample_UserManager
{
    function auth($db, $mailaddress, $password)
    {
        $sql = 'SELECT password FROM user WHERE email=?';
        $stmt = $db->prepare($sql);
        $stmt->bindparam(1, $mailaddress);
        $stmt->execute();
        $row = $stmt->fetch();
        $stmt->closeCursor();
        if ($row[0] != md5($password)) {
            return Ethna::raiseNotice('¥Ñ¥¹¥ï¡¼¥É¤¬°ã¤¤¤Þ¤¹', E_SAMPLE_AUTH);
        }
        return 0;
    }
}

?>

PDO ¤Ë¤Ù¤Ã¤¿¤ê¤È¤¤¤¦´¶¤¸¤Ë¤Ê¤ë¤¬¡¢ µÕ¤Ë¤³¤ì¤¯¤é¤¤¤Î¤³¤È¤¬½ñ¤±¤Ê¤¤¤È PDO ¤ò»È¤¦°ÕÌ£¤¬Ìµ¤¤¡£ ¤É¤¦¤»¸½¾õ¤Ç¤Ï¡¢Ethna_DB ¤Ï¤¿¤¤¤·¤ÆÃê¾Ý²½¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢ ¤³¤ì¤Ç¤¤¤¤¤ó¤¸¤ã¤Ê¤¤¤«¤È»×¤¦¡£

¤³¤Î¥¨¥ó¥È¥ê¤Î³¤­: 2006-06-17 (ÅÚ)
Tags: Ethna | ¤³¤Î¥¨¥ó¥È¥ê¤ò´Þ¤à del.icio.us | ¤³¤Î¥¨¥ó¥È¥ê¤ò´Þ¤à¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯ | ¤³¤Î¥¨¥ó¥È¥ê¤ò´Þ¤à livedoor ¥¯¥ê¥Ã¥× | Permalink
ËÜÆü¤Î¥ê¥ó¥¯¸µ

ÊÔ½¸