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