|
Zend_Db コンポーネント 共通
基本:
O/R マッピング
その他
PHP application -> Zend_Db ->Pdo_Mysql adapter -> MySQL ->Pdo_Pgsql adapter -> PostgreSQL ->Pdo_Oci adapter -> Oracle ->その他 -> other.. Zend_Db対応しているデータベース
Zend_Db::factory($adapter, $config)
<?php require_once 'Zend_Db.php'; try {
$db = Zend_Db::factory(
'Pdo_Mysql',
array(
'host' => 'localhost',
'username'=>'hoge',
'password'=>'hogepw'
'dbname'=>'zend'
)
); #この時点ではまだ接続は確定されていない
$db->getConnection();
print('データベース接続に成功しました');
} catch (Zend_Exception $e) {
die($e->getMessage());
}
$db->closeConnection(); #通常はスクリプト終了時に切断処理が行われるので書く必要はない
}
DB接続に関しての注意事項
データベース接続情報を外部ファイルとして保持する †#hogehoge.ini [database] adapter = Pdo_Mysql params.host = localhost params.dbname = book params.username = hoger params.password = hogepw #connect_ini.php <?php require_once 'Zend/Config/Ini.php'; require_once 'Zend/Db.php'; try{
$config = new Zend_Config_Ini('../hogehoge.ini', 'database');
$db = Zend_Db::factory($config);
$db->getConnect();
print('データベース接続に成功しました');
} catch (Zend_Exception $e ) {
die($e->getMessage());
}
$db->closeConnection();
?> Zend_DB_Adapter_Abstruct;;query($sql, $params) $sql ; 任意のクエリ $params ; バインドするパラメータ $db->query('SET CHARACTER SET utf8');
DbManager?クラスを使う DbManager.class.phpをインクルードする $db = DbManager;;getConnection(); プレイスフォルダー(名前つきパラメーター) -> :XXXX $str = $db->query('INSERT INTO address(isbn) VALUE (:isbn)', array(':isbn"=>$_POST['isbn']));
パラメーターの置き場所で、実行時に動的にパラメーターを埋め込むことが出来る クォート処理 Zend_Db_Adapter_Abstruct::quote($str, $type);
?(名前なしパラメーター) $str = $db->query('INSERT INTO address(isbn) VALUE (?)', array($_POST['isbn']));
<?php
require_once 'DbManager.class.php';
$db = DbManager::getConnection();
$str = $db->query("DELETE FROM book WHERE published <= '2008-12-12'");
print('削除件数:'.$str->rowCount().'件');
rowCount method
Zend_Db_Adapter_Abstruct::lastInsertID($table, $key))
※lastInsertID()は現在の接続で最後に取得したオートインクリメント値を取得する 他のユーザーからの同時実行の影響を受けるquery SELECT MAX(id) FROM guest 結果セットの取得
$stt = $db->query('SELECT * FROM book ORDER BY published DESC'); while($row = $stt->fetch(Zend_Db;;FETCH_ASSOC)){ echo $row['isbn'].'-'.$row['title'].'-'.$row['publish']; }
$db->setFetchMode?(Zend_Db::FETCH_OBJ);
Zend_Dbで利用可能なフェッチモード
fetchAll method
fetchOne method
fetchCol method
fetchRow method
fetchPairs method
bindXxxx method
prepare/execute
bindValue
bindParam
Select method †require_once 'DbManager?.class.php'; $db = DbManager?::getConnection(); #データベース接続を取得 $sel = $db->select(); #SELECT命令構築のためのZend_Db_Selectオブジェクトを生成 $sel->from('book', array('isbn', 'title', 'price')); #from 句を追加 $sel->order('publised'); #order句を追加 #sel->where('publish = ?', $_POST['publish']); #where句を追加 $stt = $db->query($sel); #Zend_Db_Selectオブジェクトの内容に基づいてクレイを実行 print_r($stt->fetchAll()); 自動生成されたクエリの確認 __toString ; 生成されたクエリの結果 __getPart ; 取得したい句を得る(定数あり) メタデータ
トランザクション処理
$db = DbManager?::getConnection(); $db->beginTransaction(); #トランザクション処理を開始する $db->query("INSERT INTO book ('isbn') VALUE("1023-hoge")');\ $db->commit(); } catch (Zend_Db_Statement_Exception $e) { $db->rollBack(); print($e->getMessage()); } catch (Exception $e){ print($e->getMessage()); } プロファイリング †Zend_Db_Profile class
INSERT/UPDATE/DELETEなどは後でチェック Zend_View(ビュー機能) †Zend_Layout(ツーステップビューパターン) †Zend_Validate(検証機能) †Zend_Uri(URI関連) †Zend_Filter(フィルタリング機能) †Zend_Filter_Input(検証/フィルタ管理) † |