SOY CMSとSOY ShopではPHPを自由に記述できるモジュールという機能があります。

PHPが自由に記述できるということで、当然PDOでデータベースに接続してデータを取得できるけど、

PDOは返ってきた結果を整形して使える様になるまで結構ダルい。


SOY CMSとSOY Shopでは、

PDOを実行して、使い勝手の良い形にして結果を返すオブジェクトが用意されているので、

今回はその紹介をします。




例えば、soyshop_userというテーブルから新しく登録した方、上位5件まで取得したい場合は、

SQLは下記の様になる。

SELECT * FROM soyshop_user WHERE is_disabled != 1 ORDER BY register_date DESC;

※is_disabledは削除した顧客であるかどうかのフラグ


これをPDOで実行すると、

実際のコードは

$sql = "SELECT * FROM soyshop_user WHERE is_disabled != 1 ORDER BY register_date DESC;"
$pdo = new PDO(dsn, id, pass);
foreach($pdo->query($sql) as $r){
	var_dump($r);
}

こんな感じで、結果は、

array(82) {
  ["id"]=>
  string(1) "2"
  [0]=>
  string(1) "2"
  ["mail_address"]=>
  string(20) "info@example.com"
  [1]=>
  string(20) "info@example.com"
  ["attribute1"]=>
  string(0) ""
  [2]=>
  string(0) ""
  ["attribute2"]=>
  string(0) ""
  [3]=>
  string(0) ""
  ["attribute3"]=>
  string(0) ""
  [4]=>
  string(0) ""
  ["name"]=>
  string(9) "齋藤毅"
  [5]=>
  string(9) "齋藤毅"
  ["reading"]=>
  string(21) "サイトウツヨシ"
  [6]=>
  string(21) "サイトウツヨシ"
  /** 途中省略 **/
}

こんな感じの結果が5回表示される。

この結果は使い勝手が悪い。


これをSOY CMSとSOY ShopにあるSOY2DAOクラスを利用すると、

$sql = "SELECT * FROM soyshop_user WHERE is_disabled != 1 ORDER BY register_date DESC;"

//すでにDSN関連の情報は設定されている
$dao = new SOY2DAO();
try {
	$results = $dao->executeQuery($sql);
} catch(Exception $e) {
	$results = array();
}

※daoでSQL構文を実行する際、try-catchで例外処理を入れておいた方が良い


で良い。


結果も、

array(4) {
  [0]=>
  array(41) {
    ["id"]=>
    string(1) "2"
    ["mail_address"]=>
    string(20) "info@example.com"
    ["attribute1"]=>
    string(0) ""
    ["attribute2"]=>
    string(0) ""
    ["attribute3"]=>
    string(0) ""
    ["name"]=>
    string(9) "齋藤毅"
    ["reading"]=>
    string(21) "サイトウツヨシ"
    /** 途中省略 **/
  }
  [1]=>
  array(41) {
    /** 人数分結果が返ってくる **/
  }
}

foreachで繰り返し処理をしなくても、一つの変数に使い勝手の良いデータが入っている。


というわけで、

SOY CMSとSOY ShopのモジュールでSQLを使用したい場合は、SOY2DAOクラスを使うと、より感覚的にデータベースを操作できるようになる。


次回は、SOY2DAOでプリペアードステートメントについて書きます。