[Zend Framework] Zend_Db 基本
12月 17th, 2007 Posted in Zend Framework
PHPからDBにアクセスする部分を請け負うアダプタ(Zend_Db_Adapterを拡張したもの)は、PDOドライバに対応しているようですね。
MySQL 5.0 、PHP5.1以降を使っていたので、./configure時に –with-mysqliオプションを付けてPHPをインストールするだけで、Zend_Db_Adapter_Mysqliのアダプタが使えました(他の方法は上記PDOのリンクをご覧ください)。
$ ./configure --with-mysqli=/path/to/the/mysql_config (以下略)
基本的な使い方は以下の通りです。
アダプタの取得
$params = array( 'host'=>'localhost', // DBサーバーのホスト名 'username'=>'user_name', // DBに接続するユーザー名 'password'=>'passwd', // 上記ユーザーのパスワード 'dbname'=>'test' // DB名(スキーマ名) ); // アダプタの取得 $dbh = Zend_Db::factory('MySQLi', $params);
行の取得
$where = $dbh->quoteInto('id = ?', $id); // エスケープ処理 $sql = "SELECT name, age " . "FROM users " . "WHERE $where " $rows = $dbh->fetchArray($sql);
戻り値は以下のようになります
array( 0 =>array('name'=>hoge, 'age'=>1), 1 =>... )
fetchArrayのほかに、 他の取得方法として、
- fetchAssoc 取得した最初の行の最初の列がキーになる。
- fetchRow 最初の行のみを取得
- fetchCol 最初の列のみ取得
- fetchPairs 最初の列が配列のキーに、2番目の行が値になる
- fetchOne 最初の値のみ取得
があります。
行の挿入
$table = 'users'; $values = array( 'name'=>'bar', 'age'=>20 ); $dbh->insert($table, $values); // auto incrementでprimary keyの場合、keyの値を取得 $id = $dbh->lastInsertId();
行の更新
$table = 'users'; $set = array( 'name'=>'baz', 'age'=>25 ); $where = $dbh->quoteInto('id = ?', $id); // 反映された行数が返る $affected_row = $dbh->update($table, $set, $where);
where 部分は複数条件も可能です (selectも同様)
$where = array( $dbh->quoteInto('name = ?', 'baz'), $dbh->quoteInto('age in(?)', array(20, 21, 22)) );
この場合は、(where) name = ‘baz’ AND age in(20, 21, 22) のようになります。
行の削除
$table = 'users'; $where = $dbh->quoteInto('id = ?', $id); $affected_row = $dbh->delete($table, $where);
MySQLのマスター/スレーブ構成でレプリケーションをおこなう場合、アダプタの切り替えは自分でおこなわなくてはなりません。
一番簡単にやるならこんな感じでしょうか?
$master = Zend_Db::factory('MySQLi', $params); $slave = Zend_Db::factory('MySQLi', $params);$slave->fetchAll(...); $master->insert(...); $master->update(...); $master->delete(...);
いちいち面倒ですね。 後日よいほうほうを検討します。