PDA

View Full Version : بهترین و کامل ترین کلاس ارتباط با دیتابیس



m.esmaeilzadeh
سه شنبه 18 فروردین 1394, 10:06 صبح
سلام
البته PDO خیلی کارهارو آسون کرده ولی بهتره در بیشتر موارد از کلاس واسط برای ارتباط با دیتابیس استفاده کنیم !
میخواستم بدونم از نظر امنیتی و ساده بودن استفاده چه کلاس واسط ای رو برای ارتباط با دیتابیس در نظر دارید ؟
یعنی کلاسی که خودتون استفاده کردید و متدهای خوبی برای ارتباط و واکشی هایی از دیتابیس در اختیار قرار میده ...
ممنون

j_naroogha@yahoo.com
سه شنبه 18 فروردین 1394, 10:13 صبح
خب pdo کاملترینه و جدیدترین.
توابع mysqli_connect توی wamp2.5 دیگه حذف شدن....
بهتره برین سراغ pdo چون روش های قبلی در نسخه های بعدی منسوخ خواهند شد.

m.esmaeilzadeh
سه شنبه 18 فروردین 1394, 10:42 صبح
خب pdo کاملترینه و جدیدترین.
توابع mysqli_connect توی wamp2.5 دیگه حذف شدن....
بهتره برین سراغ pdo چون روش های قبلی در نسخه های بعدی منسوخ خواهند شد.

دوست عزیز ممنون , ولی منظور من کلاس واسط بود نه توابع و آبجکت های داخل خود php :لبخند:
یعنی پکیج های ارتباط با mysql که هم میتونن با توابع قدیمی و یا pdo و mysqli کار کنن ...

rezakho
سه شنبه 18 فروردین 1394, 11:50 صبح
البته PDO کارش فراتر از واسط شدن برای ارتباط با پایگاه داده هست، در واقع PDO خود ارتباط با پایگاه داده هست! یعنی کلاس های خودتون یا چیزهایی مثل ORM و DAO و ... ذاتا نمی تونند جایگزینش بشند!

و اما برای چیزی که فکر می کنم شما دنبالشی، Propel و Doctrin و Yii Active Record و Laravel Eloquent و ... گزینه های خوبی اند.

id1385
سه شنبه 18 فروردین 1394, 12:31 عصر
سلام
اگه منظور شما pdo wrapper هستش به نظر من بهترین چیزی که می تونید داشته باشید همین کلاسی هستش که اتچ کردم
البته یه سری چیزها رو من بهش اضافه کردم و الان کاراییش بهتر شده
و علاوه بر mysql میتونید از sqlite هم استفاده کنید


آموزش:
مقادیرش رو خودتون تغییر بدید [لا حال و لا حول]
یک فایل هم ار فایلهایی که این کلاس توش استفاده شده رو هم اتچ کردم + لیست متدهای این کلاس

config:

public function pdoDns() {
return array(
'host' => $this->GetValue('DB_HOST'),
'dbname' => $this->GetValue('DB_NAME'),
'username' => $this->GetValue('DB_USER'),
'password' => $this->GetValue('DB_PASSWORD')
);
}



class instance:

global $_dBa;
global $_config;
$_config = new Config();
$_dBa = new mPDo($_config->pdoDns());


برای sqlite:

new mPDo($dbPath, TRUE);

dbPath همون آدرس فایل دیتابیس هستش مثل

$dbPath = (APP_SQLITE_PATH . $config->GetValue('SESSION_DB'));



SELECT:

$dBA->select($Table, [$key], ["$key" => "$value"])


key: آرایه ای از نام column ها و key => value آرایه از conditions ها هستش همون where

query boolean result:

$dBA->select($Table, [$key], ["$key" => "$value"])->_qResult;


record count:

$count = $dBA->select($Table, [$key], ["$key" => "$value"])->_recordCount;

البته از متد count هم می تونید استفاده کنید

have error:

$dBA->select($Table, [$key], ["$key" => "$value"])->_sError;


result as array :

$dBA->select($Table, [$key], ["$key" => "$value"])->_featch;

نتیجه رو بصورت آرایه برمیگردونه که میتونید اونو با while, foreach , ... بخونید


INSERT :

$dBA->insert($Table, $aData)

در اینجا هم aData هم آرایه از اطلاعات هست که بصورت نام فیلد => مقدار می باشد مثل:
$aData[$key] = $value;
توجه داشته باشید که بعد از متدهای insert, delete, update, select می تونید به برخی از متدها و همچنین فیلدها از جمله _qResult, _sError, _recordCount, _featch دسترسی داشته باشید

UPDATE:

$dBA->update($Table, $values, $where);


در اینجا هم values آرایه از اطلاعات هست که قراره set بشن نام فیلد => مقدار
برای اطلاع از نتیجه هم، همانطور که گفته شد به این روش می توانید استفاده کنید:

$dBA->update($Table, ['ChildCount' => $current], ['ID' => $RowId]);
if ($dBA->_qResult)
return TRUE;



DELETE:

$dBA->delete($Table, ['ID' => intval($this->theRowId)]);

به سادگی می توانید مثل موارد بالا از این مورد هم استفاده نمایید:

sql Query :
برای کوئری های خاص و یا کاستوم هم می توانید از متد pdoQuery استفاده کنید که پارامتر اولش همون sql هستش.

$dBA->pdoQuery($sql, ["$key" => "$value"])


show query :

$dBA->pdoQuery($Table, [$key], ["$key" => "$value"])->showQuery;

بهترین راهنما برای اینکه بدونین چه اتفاقی افتاده، مثل debug هستش ، خیلی کاربردیه


با احتیاط استفاده شود :

cleanTbl:

$dBA->cleanTbl($Table);

پاک کردن اطلاعات یک جدول خاص

dropTbl:

$dBA->dropTbl($Table);

حذف کامل یک جدول خاص

سوالی بود بگید تا جوابشو (اگه بلد بودم) می دم


نکته : اگر از php ورژن پایین تر استفاده می کنید [] رو به array تغییر دهید


موفق باشید