そこで、PHP PDO の紹介としてこのチュートリアルを開始しました。これまでは、基本的なmysql_*
タイプのクエリしか扱っていませんでした。
connect -> do action -> disconnect
チュートリアル全体でパターンが繰り返され、その部分だけが変更されることに気付きましたdo action
。
実際の設定では、クエリを渡すことができる関数を作成して繰り返しをなくすことは良い考えでしょうか?
例えば:
クエリを処理する関数:
<?php
function databaseDo($action) {
$db_hostname = 'localhost';
$db_username = 'root';
$db_password = 'root';
try {
// Establish DB connection
$dbh = new PDO("mysql:host=$hostname;dbname=mysql",
$db_username, $db_password);
echo 'Connected to database';
// Do something
$action($dbh); // <- here goes whatever action we wish to perform
// Close connection
$dbh = null;
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>
次に、PDO チュートリアルの最初の例のアクションを実行する場合、次のように設定します。
<?php
// Define action
$insert = function($dbh) {
$query = "INSERT INTO animals(animal_type, animal_name)
VALUES ('kiwi', 'troy')";
$exec = $dbh->exec($query);
echo $exec;
};
// Perform action
databaseDo($insert);
?>
$dbh のスコープ
$dbh を引数として使用しています。これは、グローバルにせずに、このような関数に変数を渡す適切な方法ですか?