PDA

View Full Version : گسترش یک کلاس برای کار با دیتابیس



Sajjad.Aghapour
سه شنبه 18 مهر 1391, 09:32 صبح
سلام
پیرو تاپیک هایی که دوستان برای ایجاد یک کلاس برای کار با دیتابیس در سایت iranphp.org ایجاد کرده بودند(+ و +) کلاس خیلی خلاصه ای نوشتم که شاید بتونه توی این زمینه کمک کنه. مثل هرکار عجله ای دیگه(یا غیرعجله ای) این کار میتونه باگ ها و نقایص زیادی داشته باشه. برای مثال تابع Join یا تابعی برای Limit یا Group در این کلاس وجود نداره و... .
لازم به ذکر که این کلاس براساس Fluent Interface نوشته شده...
برای تست یک دیتابیس به نام test که دارای جدولی به نام person دارای فیلدهای id, name, age, active هست...
توی این کلاس سه تابع اصلی برای اجرای Command ها وجود داره:
ExecuteNoneQuery : وقتی استفاده میشه که صرفا قصد اجرای Command رو داشته باشیم. برای مثال یک دستور update صرفا اجرا میشه و خروجی نداره.
ExecuteScalar : وقتی استفاده میشه که Command یک شرط خاص رو اجرا میکنه و مقدار Fetch شده رو برمیگردونه. برای مثال شما قصد دارید مقدار name که مربوط به id=10 هستش رو بدست بیارید. مثال دیگری که میشه زد برای login است و ...
ExecuteReader : وقتی استفاده میشه که قصد داریم رکورد به رکورد داده ها رو بخونیم. بهترین مثالی که میشه زد برای وقتیه که بخواهیم پست های سایت رو داخل صفحه اصلی نمایش بدیم.
نمونه ای از استفاده از این کلاس:



class test
{
private $link;
private $db;
function __construct()
{
require('./DB.php');
$this->link = mysql_connect('localhost', 'root', '');
mysql_select_db('test');
$this->db = new DB();
}


function Insert($name, $age)
{
$fields = array('name' => $name, 'age' => $age);
// normal calling functions
$this->db->Insert('person', $fields);
$this->db->ExecuteNoneQuery($this->link);
}

function Update($id, $name, $age)
{
$fields = array('name' => $name, 'age' => $age);
// using with fluent interface calling
$this->db->Update('person', $fields, 'id', $id)->ExecuteNoneQuery($this->link);
}

function GetPersons()
{
$this->db->Select('person', '*')->ExecuteReader($this->link, 'Show', $this);
}

function GetPerson($id)
{
print_r($this->db->Select('person', '*')->Where('id', $id, Equal)->ExecuteScalar($this->link, RecordResult));
}

function GetSumAge()
{
echo ($this->db->Select('person', array('sum(age)'))->ExecuteScalar($this->link));
}

function Show($arg)
{
echo $arg['row_number'] . ' : ' . $arg['fetched_row']['name'] . '<br />';
}
}