ZendFramework DB(データベース)
追記:以前書いた記事であり、内容に好ましくないコードも含まれております。
■接続
<?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()メソッドと同じように条件を複数指定することもできる。
TrackBack URL :
Comments (1)
[...] This post was mentioned on Twitter by わかめにゅーす(PHP). わかめにゅーす(PHP) said: ZendFramework DB(データベース) - @blog.justoneplanet.info http://bit.ly/gWDG1L [...]