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'];
}
