PDOでMySQLに接続する部分を自作関数にする

PDOでMySQLに接続する部分を自作関数にします。



経緯

実際にPDOでMySQLを操作するためのコードをかきはじめました。
あるデータがなければ、登録して〜というのを何度も何度もやるので、DAOパターンなるもので、抽象化して取扱いやすくしようと思いました。


が。オブジェクト指向だ、DAOだ、というのはさらっと見たのですが把握できませんでした(--#


▽DAOパターンですっきりコーディング!(@IT)
 http://www.atmarkit.co.jp/flinux/rensai/mysql5_06/mysql5_06a.html



ここの記事で書かれているmysqliの部分をPDOで置き換えていけばいいんでしょうけど、なにせmysqliで組んだこともないし、抽象的に組み立てていくには経験値が足りず……うぐぐ。


したがって相変わらず、「とりあえず全部手書き」することにします。
ひととおり動くようになって具体化してから置き換えていこっと。
1つが未経験なのはなんとかなるけど、2つ以上未経験では手探りのしようもないですからね
(という結論に戻ってくるまでにほぼ1日かかった)


is_null

is_null($var)

「指定した変数が NULL かどうかを調べます」。


とりあえず、これ使います。


$pdoがNULLだったら、PODで接続する。

<?php
  if(is_null($pdo)){
    try {
      $pdo = new PDO(
	"$db_type:host=$db_host; dbname=$db_name","$db_user","$db_pass"
      );
    } catch(PDOException $e){
	var_dump($e->getMessage());
    }
  }
?>

こんな感じ。


そのまま組み込める用に自作関数にしてみる

<?php
function connect(){
  if(is_null($GLOBALS['pdo'])){
    try {
      $GLOBALS['pdo'] = new PDO(
	"{$GLOBALS['db_type']}:host={$GLOBALS['db_host']}; dbname={$GLOBALS['db_name']}","{$GLOBALS['db_user']}","{$GLOBALS['db_pass']}"
      );
    } catch(PDOException $e){
	var_dump($e->getMessage());
    }
  }
}

// 接続するときはこんな感じ
try {
	connect();
} catch(PDOException $e){
	var_dump($e->getMessage());
}
?>

あとは$stmt = $pdo->prepare()する前にいつもconnect()するようにすればOK
なおm_check_item_salerとかの自作関数の中から指定するときは$GLOBALS['pdo']だから注意、と(見落としてハマった)。

<?php
try {
	connect();
	$item_saler_id = m_check_id($sql_item_saler_guid);
} catch(PDOException $e){
	var_dump($e->getMessage());
}


// □09.DBの切断
$pdo = null;
?>


【追記】
今更ですが、ひでぇなこりゃ……。書き直すまでもないので放置しますが、なんというかイタイ