Wadslog

[Zend Framework] Zend_Db 基本

Dec 16, 2007

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 =>… )


*   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(...);
```いちいち面倒ですね。 後日よいほうほうを検討します。
comments powered by Disqus