@blog.justoneplanet.info

日々勉強

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()メソッドと同じように条件を複数指定することもできる。

1件のコメント»

RSS feed for comments on this post.TrackBack URL

Leave a comment