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日かかった)
$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; ?>
【追記】
今更ですが、ひでぇなこりゃ……。書き直すまでもないので放置しますが、なんというかイタイ