ZendFramework:Zend_Db
Zend_Dbの使い方を調べたのでその辺をメモ。
PDOを使った場合の例
$db = Zend_Db::factory('Pdo_Mysql', $dbConf);
SELECT系の例 (テーブル名test)
$select = $db->select();
$select->from('test', '*');
$select->where('id = ?', 1);
$select->orWhere('category = ?', a);
INSERT系の例
$data = array(
'title' => 'titleText',
'description' => 'descriptionText',
'category' => 'categoryName',
);
$db->insert('test', $data);
UPDATE系の例
$data = array(
'title' => 'titleText',
'description' => 'descriptionText',
'category' => 'categoryName',
);
$where[] = $db->quoteInto('id = ?', 1);
$db->update('test', $data, $where);
andでWHERE文を追加したい時
$where = $db->quoteInto('id = ?', 1);
$where = $db->quoteInto('category = ?', categoryName);
$db->update('test', $data, $where);
orでWHERE文を繋ぎたい時
$orWhereA = $db->quoteInto('id = ?', 1);
$orWhereB = $db->quoteInto('category = ?', 'categoryName');
$where[] = $orWhereA . ' or ' . $orWhereB;
$db->update('test', $data, $where);
ちなみに、こんな記述はできそうでできなかった
$where[] = $db->quoteInto('id = ? || category = ?', 1, 'categoryName');
この出力は
id = '2' || category = '2'
となる。
これまでの例ではSQLインジェクションは心配しなくてよかったが、
下記のようなWHERE節の例では、SQLインジェクションの可能性がある。
// NGな実装
$where[] = "id = " . $_GET['id'];
きちんとquoteIntoをかけてあげる必要がある。
$where[] = $db->quoteInto('id = ?', $_GET['id']);
詳しくは、Zend_Dbのドキュメントを参考
http://framework.zend.com/manual/ja/zend.db.adapter.html