library/smarty/demo/plugins/resource.mysqls.php
changeset 46 f11c31f7fa3e
parent 45 a56e7f9a0463
child 47 03388ec805b4
equal deleted inserted replaced
45:a56e7f9a0463 46:f11c31f7fa3e
     1 <?php
       
     2 
       
     3 /**
       
     4  * MySQL Resource
       
     5  * Resource Implementation based on the Custom API to use
       
     6  * MySQL as the storage resource for Smarty's templates and configs.
       
     7  * Note that this MySQL implementation fetches the source and timestamps in
       
     8  * a single database query, instead of two separate like resource.mysql.php does.
       
     9  * Table definition:
       
    10  * <pre>CREATE TABLE IF NOT EXISTS `templates` (
       
    11  *   `name` varchar(100) NOT NULL,
       
    12  *   `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
       
    13  *   `source` text,
       
    14  *   PRIMARY KEY (`name`)
       
    15  * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
       
    16  * Demo data:
       
    17  * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
       
    18  *
       
    19  * @package Resource-examples
       
    20  * @author  Rodney Rehm
       
    21  */
       
    22 class Smarty_Resource_Mysqls extends Smarty_Resource_Custom {
       
    23     // PDO instance
       
    24     protected $db;
       
    25     // prepared fetch() statement
       
    26     protected $fetch;
       
    27 
       
    28     public function __construct() {
       
    29         try {
       
    30             $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
       
    31         } catch (PDOException $e) {
       
    32             throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
       
    33         }
       
    34         $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
       
    35     }
       
    36 
       
    37     /**
       
    38      * Fetch a template and its modification time from database
       
    39      *
       
    40      * @param  string $name template name
       
    41      * @param  string $source template source
       
    42      * @param  integer $mtime template modification timestamp (epoch)
       
    43      *
       
    44      * @return void
       
    45      */
       
    46     protected function fetch($name, &$source, &$mtime) {
       
    47         $this->fetch->execute(array('name' => $name));
       
    48         $row = $this->fetch->fetch();
       
    49         $this->fetch->closeCursor();
       
    50         if ($row) {
       
    51             $source = $row['source'];
       
    52             $mtime = strtotime($row['modified']);
       
    53         } else {
       
    54             $source = null;
       
    55             $mtime = null;
       
    56         }
       
    57     }
       
    58 }