追記:以前書いた記事であり、内容に好ましくないコードも含まれております。
■接続
<?php require_once 'Zend/Db.php'; $params = array( 'host' => 'localhost', 'username' => 'name', 'password' => 'pass', 'dbname' => 'dbname', ); $dbh = Zend_Db::factory('Pdo_Mysql', $params); //$dbh->query("SET NAMES 'utf8'");
■SELECT
<?php require_once 'Zend/Db.php'; $params = array( 'host' => 'localhost', 'username' => 'name', 'password' => 'pass', 'dbname' => 'dbname', ); $dbh = Zend_Db::factory('Pdo_Mysql', $params); //$dbh->query("SET NAMES 'utf8'"); $dbh->setFetchMode(Zend_Db::FETCH_ASSOC); //$dbh->setFetchMode(Zend_Db::FETCH_NUM); //$dbh->setFetchMode(Zend_Db::FETCH_BOTH); //$dbh->setFetchMode(Zend_Db::FETCH_OBJ); $sql = "SELECT * FROM `tablename`"; $result = $dbh->fetchAll($sql) $dbh->closeConnection();
プリぺアドステートメント
<?php require_once 'Zend/Db.php'; $params = array( 'host' => 'localhost', 'username' => 'name', 'password' => 'pass', 'dbname' => 'dbname', ); $dbh = Zend_Db::factory('Pdo_Mysql', $params); //$dbh->query("SET NAMES 'utf8'"); $dbh->setFetchMode(Zend_Db::FETCH_ASSOC); //$dbh->setFetchMode(Zend_Db::FETCH_NUM); //$dbh->setFetchMode(Zend_Db::FETCH_BOTH); //$dbh->setFetchMode(Zend_Db::FETCH_OBJ); $sql = "SELECT * FROM `user` WHERE `id` = ? AND `password` = ?"; $result = $dbh->fetchAll($sql, array($name, md5($password))); $dbh->closeConnection();
以下のようにも書ける。
<?php require_once 'Zend/Db.php'; $params = array( 'host' => 'localhost', 'username' => 'name', 'password' => 'pass', 'dbname' => 'dbname', ); $dbh = Zend_Db::factory('Pdo_Mysql', $params); //$dbh->query("SET NAMES 'utf8'"); $dbh->setFetchMode(Zend_Db::FETCH_ASSOC); //$dbh->setFetchMode(Zend_Db::FETCH_NUM); //$dbh->setFetchMode(Zend_Db::FETCH_BOTH); //$dbh->setFetchMode(Zend_Db::FETCH_OBJ); $sql = "SELECT * FROM `user` WHERE `id` = :name AND `password` = :pass"; $result = $dbh->fetchAll($sql, array('name' => $name, 'pass' => md5($pass))); $dbh->closeConnection();
サニタイジング漏れからSQLインジェクションに繋がるため、$dbh->quoteメソッドはなるべく使わない。
■INSERT
SELECT文のようにquery()メソッドでプリぺアドステートメントを使って実行しても構わないが以下のようにinsert()メソッドも用意されている。
<?php require_once 'Zend/Db.php'; $params = array( 'host' => 'localhost', 'username' => 'name', 'password' => 'pass', 'dbname' => 'dbname', ); $dbh = Zend_Db::factory('Pdo_Mysql', $params); $dbh->setFetchMode(Zend_Db::FETCH_ASSOC); $dbh->insert( 'tablename_user', array( 'name' => 'John', 'birth' => '1985.06.30' ) ); $dbh->closeConnection();
挿入データは連想配列にする。
■UPDATE
SELECT文のようにquery()メソッドでプリぺアドステートメントを使って実行しても構わないが以下のようにupdate()メソッドも用意されている。
<?php require_once 'Zend/Db.php'; $params = array( 'host' => 'localhost', 'username' => 'name', 'password' => 'pass', 'dbname' => 'dbname', ); $dbh = Zend_Db::factory('Pdo_Mysql', $params); $dbh->setFetchMode(Zend_Db::FETCH_ASSOC); $dbh->update( 'tablename_user', array( 'name' => 'John', 'birth' => '1985.06.30' ), "`id` = '0123'"//WHERE ); $dbh->closeConnection();
更新データは連想配列にする。ちなみに条件が複数ある場合は以下のように条件部分も配列となる。
<?php require_once 'Zend/Db.php'; $params = array( 'host' => 'localhost', 'username' => 'name', 'password' => 'pass', 'dbname' => 'dbname', ); $dbh = Zend_Db::factory('Pdo_Mysql', $params); $dbh->setFetchMode(Zend_Db::FETCH_ASSOC); $dbh->update( 'tablename_user', array( 'birth' => '1985.06.30' ), array( "`id` = '0123'", "`name` = 'John'" ), ); $dbh->closeConnection();
条件を複数指定した場合はAND指定になる。
■DELETE
SELECT文のようにquery()メソッドでプリぺアドステートメントを使って実行しても構わないが以下のようにdelete()メソッドも用意されている。
<?php require_once 'Zend/Db.php'; $params = array( 'host' => 'localhost', 'username' => 'name', 'password' => 'pass', 'dbname' => 'dbname', ); $dbh = Zend_Db::factory('Pdo_Mysql', $params); $dbh->setFetchMode(Zend_Db::FETCH_ASSOC); $dbh->delete( 'tablename_user', "`id` = '0123'" ); $dbh->closeConnection();
insert()メソッドと同じように条件を複数指定することもできる。
ピンバック: Tweets that mention ZendFramework DB(データベース) - @blog.justoneplanet.info -- Topsy.com