R26

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.