DBArrayObject
PHPにおいて、$_SESSIONとまったくおなじ感覚で、データベースにアクセスできるDBArrayObjectクラスを作りました。簡単に"PHPらしい"方法でデータベースを使うことができます。
I have developed a PHP class that you can access to the database with the same style like $_SESSION.
This DB wrapper enables you to access to the DB in pure PHP way.
$_DB = new DBArrayObject();
主キーの設定
//デフォルトは"id"。idを主キーにしたテーブルの場合は、設定の必要なし。
$_DB["users"]->setkey("username");
Select
//絞り方の順序は自由に。
$users["ryuuji"];
$users->filter(array("city"=>"gifu","age"=>20));
$users->sort(SORT_CREATE);
$users->filter(array("city"=>"gifu"))->sort(SORT_CREATE)->limit(0,20);
$users->column("id,location")->filter(array("city"=>"gifu"))-> sort(SORT_CREATE)->groupby("hoge")->limit(0,20);
$users->get(SORT_CREATE, array("city"=>"gifu"),0,20);
//もちろんこうかいても同じ:
$_DB["users"]["ryuuji"];
$_DB["users"]->filter(array("city"=>"gifu","age"=>20));
//Loop
foreach($users as $row){
print $row["name"];
}
foreach($users->limit(10,20) as $row){
print $row["name"];
}
//Count
count($users);
$total = $users->filter("age"=>20)->limit(0,20)->get_total_count(); //limitがないときの全体数を取得
Insert
$_DB["users"] = array("name"=>"ryuuji","age"=>26,"location"=>"gifu");
$id = $users->get_insert_id(); //直前にinsertされた行のキーの値を取得
//もちろんこうかいても同じ:
$users = $_DB["users"];
$users = array("name"=>"ryuuji","age"=>26,"location"=>"gifu");
Update
$users["ryuuji"]["email"] = "ryuuji@test.com";
$users["ryuuji"] = array("age"=>27,"city"=>"tokyo") //ageとlocationのみ更新
$users->filter("age"=>">30")->update(array("city"=>"gifu"));
Delete
unset($users["ryuuji"]);
$users->filter(array("city"=>"gifu","age"=>20))->delete();
注意点
//以下の場合、$ryuujiの値を変更すると、DBが実際に更新されます。
//データを別の配列に収納したい場合は、array型にキャストしてください。
$ryuuji = $users["ryuuji"];
$ryuuji["email"] = "ryuuji@test.com"; //DBが更新される
$ryuuji = (array)$users["ryuuji"];
$ryuuji["email"] = "ryuuji@test.com"; //DBは更新されない
//注意点2
実際にSQLが発行されるタイミング
foreach ($users as $user){ //一回だけ発行される
print $user["email"];
}
foreach ($users as $user){ //発行されない
print $user["city"];
}
print count($users); //発行されない
$users->filter(array("city"=>"gifu"))->sort(SORT_CREATE); //一回だけ発行される
print $users["ryuuji"]["email"] //一回だけ発行される
print $users["ryuuji"]["title"] //発行されない
If you want to learn more, leave comments below.