Php/zend framework/DBメモ
提供: 初心者エンジニアの簡易メモ
目次
DB接続
$this->db = Zend_Db::factory('Pdo_Mysql', array( 'host' => 'localhost', 'username' => 'usertest', 'password' => 'password', 'dbname' => 'test', 'charset' => 'utf8', 'port' => '3306' )); $sql = "SELECT * FROM test"; $rows = $this->db->fetchAll($sql);
- DB接続エラー修正
trying to connect via unix:///var/mysql/mysql.sock
- 'host' => 'localhost', + 'host' => '127.0.0.1',
oracleだと・・
Zend_Db::factory('Pdo_Oci'
DBのquote
$this->db->quote($_POST['test']);
外部dbのiniを使用
//Zend_Configコンポーネントの呼び出し require_once 'Zend/Config/Ini.php'; //Zend_Dbコンポーネントの呼び出し require_once 'Zend/Db.php'; //外部ファイルdb.iniをロードしZend_Configオブジェクトを生成 $config = new Zend_Config_Ini('../../../../zendapps/db/db.ini','production'); //Zend_Configオブジェクトを使って、アダプタクラスを生成 $db = Zend_Db::factory($config->default);
db.ini
[production] default.adapter = Pdo_Mysql default.params.host = localhost default.params.dbname = db_zend default.params.username = xxxxx default.params.password = xxxxxxxx default.params.charset = UTF8 default.params.port = 3306
bootstrap使用
bootstrap.phpに以下を追記
protected function _initDb() { //外部ファイルdb.iniをロードしZend_Configオブジェクトを生成 $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini',APPLICATION_ENV); //Zend_Configオブジェクトを使って、アダプタクラスを生成 $db = Zend_Db::factory($config->default); // $db->query("set names utf8"); Zend_Db_Table::setDefaultAdapter($db); }
プレースホルダ
$sql = 'INSERT INTO users(name, age) values(?, ?);'; $db->query($sql, array('taro', 10));
sqlログを取る
注:プレースホルダーとバインド値は個別に出力
- action.php
$db = CustomDb::factory(); $db->query($sql);
- CustomDb.php
<?php require_once 'Zend/Db.php'; class CustomDb extends Zend_Db { private $_db; private function __construct($adapter, $config = array()) { $this->_db = Zend_Db::factory($adapter, $config); // プロファイルを有効に $this->_db->getProfiler()->setEnabled(true); } public static function factory($adapter, $config = array()) { $class = __CLASS__; $instance = new $class($adapter, $config); return $instance; } public function __call($name, array $args) { switch ($name) { case 'fetchAll': case 'fetchRow': case 'fetchAssoc': case 'fetchCol': case 'fetchOne': case 'prepare': case 'query': case 'exec': require_once 'Zend/Log.php'; $log = new Zend_Log(); require_once 'Zend/Log/Writer/Stream.php'; $log->addWriter(new Zend_Log_Writer_Stream('/tmp/sql.log')); try { $buf = call_user_func_array(array($this->_db, $name), $args); $query = $this->_db->getProfiler()->getLastQueryProfile(); $log->log(sprintf("%s [%s] %ss", $query->getQuery(), join(",", $query->getQueryParams()), $query->getElapsedSecs()), Zend_Log::DEBUG); } catch (Exception $e) { $query = $this->_db->getProfiler()->getLastQueryProfile(); $log->log(sprintf("%s [%s]", $query->getQuery(), join(",", $query->getQueryParams())), Zend_Log::ERR); } return $buf; default: return call_user_func_array(array($this->_db, $name), $args); } } }
ステートメントホルダからfetch
$stmt = $db->query('SELECT * FROM bugs'); while ($row = $stmt->fetch()) { echo $row['bug_description']; }