خودآموز گام به گام PHP ADOdb

ارسال شده توسط administrator
17. جانفييه 2012 20:47

 

PHP ADOdb چیست؟

·         کتابخانه ای برای دسترسی به انواع از پایگاه داده.

·          PHP ADOdb با PHP نوشته شده است.

·          از سیستم متاتایپ (metatype system) برای یافتن نوع داده(data type)  معادل یک فیلد در پایگاه داده استفاده می کند.

·         ایده ان از Microsoft ADOdb گرفته شده است.

چرا PHP ADOdb؟

·         از انواع پایگاه داده مانند MySQL، Oracle، Microsoft SQL Server، Sybase، Sybase SQL Anywhere، Informix، PostgreSQL، FrontBase، Interbase ، Foxpro، Access، ADO و ODBC پشتیبانی می کند.

·         همچنین این کتابخانه نه تنها از دستورات select و Delete که از Insert  نیز پشتیبانی می کند.

·         PHP ADOdb از نوع Write once run anywhere است. (یکبار بنویسید همه جا استفاده کنید).

·         کد sql ان انتقال پذیر(portable)  است .

 

مقدمه ای برای ADOdb

می توانید مشتریتان را با گفتن "مشکلی نیست می توانید از mysql، mssql، oracle و غیره استفاده کنید"، شگفت زده کنید. برنامه ما بدون نیاز به تغییر کد، تمام پایگاه های داده اصلی را پشتیبانی می کند. حتما ارتقاء می گیرید. ابزار جادویی ما php ADOdb است. توابع PHP برای دسترسی به پایگاه داده استاندارد نشده است. این نیاز به یک Class Library پایگاه داده را برای پنهان کردن اختلافات بین API پایگاه داده، بیشتر می کند، با این Class Library می توانیم به راحتی پایگاه داده را تعویض کنیم. در حال حاضر ADOdb از MySQL، Oracle، Microsoft SQL Server، Sybase، Sybase SQL Anywhere، Informix، PostgreSQL، FrontBase، Interbase، Foxpro، Access، ADO and ODBC پشتیبانی می کند. گزارش هایی مبنی بر اتصال موفق به Progress و DB2 هم از طریق ODBC داشته ایم. ویژگی های یکتای ADOdb عبارتند از:

·         برای کاربران ویندوز کار با ان راحت است. چون بسیاری از قرارداد ها شبیه Microsoft ADO است. بر خلاف دیگر کلاس های پایگاه داده PHP که بر دستور Select تمرکز دارند، ما کدی را ارائه می کنیم که insert و delete را هم انجام داده و قابل انتقال به دیگر پایگاه های داده باشد. برای هر پایگاه داده، متدهایی برای پردازش تاریخ (date)، الحاق رشته ها ارائه شده است.

·         یک سیستم متاتایپ به طور توکار نوشته شده که می توانیم معادل های نوع داده هایی مانند CHAR، STRING و TEXT را برای انواع پایگاه داده ها بیابیم.

·         انتقال ان راحت است، چون تمام کد وابسته به پایگاه داده در توابع stub نگهداری می شود. لازم نیست منطق هسته ی(Core logic)  کلاس ها را منتقل کنید.

·         پشتیبانی از PHP Session.

حالا این کتابخانه را تست می کنیم.

1.     از sourceforge انرا دانلود کنید.

2.     فایل فشرده شده را در یک دایرکتوری وب استخراج کنید.

3.     مدیر پایگاه داده را باز کنید (مثلا phpmyadmin).

4.     یک پایگاه داده بسازید (مثلا inventory)

5.     یک جدول ساده بسازید (مثلا products)

6.     حالا یک تست ساده. کد زیر رابنویسید. انرا درون دایرکتوری با پوشه adodb بگذارید نام انرا adodbtest.php بگذارید:

01

<?php    

02

    include('adodb/adodb.inc.php');

03

     

04

    $databasetype = 'mysql';

05

    $server = 'localhost';

06

    $user   = 'root';

07

    $password = 'r0ot';

08

    $database = 'inventory';

09

     

10

    $db = ADONewConnection($databasetype);

11

    $db->debug = true;

12

    $db->Connect($server، $user، $password، $database);

13

    $rs = $db->Execute('select * from products');

14

    print "<pre>";

15

    print_r($rs->GetRows());

16

    print "</pre>";

17

?>

   

7.     فایل را اجرا کنید

 

دستور Connection

در این بخش، درباره اتصال ها (connection) در php ADOdb صحبت خواهیم کرد. دو اتصال در ADOdb وجود دارد:Connect()  و Pconnect().

Connect($host,[$user],[$password],[$database])  - از این در مثال اولمان استفاده کردیم. اتصال ناماندگار (non-persistent) به پایگاه داده یا سرور به نام $host، با استفاده از نام کاربری $user و پسورد $password. اگر سرور از چند پایگاه داده پشتیبانی کند، به $database متصل می شویم.

کد مانند این است:

1

$db = ADONewConnection($databasetype);

2

$db->debug = true;

 

3

$db->Connect($server, $user, $password, $database);

اگر به جای OLEDB از Microsoft ADO استفاده می کنید می توانید، پارامتر $database را برابر ارائه دهنده داده OLEDB (OLEDB data provider) که استفاده می کنید قرار دهید.

PConnect($host,[$user],[$password],[$database])  - اتصال ماندگار (persistent) به پایگاه داده با استفاده از نام کاربری $user و پسورد $password. . اگر سرور از چند پایگاه داده پشتیبانی کند، به $database متصل می شویم.

1

include('adodb.inc.php'); # load code common to ADOdb

2

    $conn = &ADONewConnection('access'); # create a connection

 

3

    $conn->PConnect('northwind'); # connect to MS-Access, northwind DSN

 

اگر connect و pconnect را با هم اشتباه می کنید، نکات زیر ممکن است مفید باشد:

اول، هنگام اتصال، تابع سعی می کند، لینکی ماندگار و باز به همان هاست، نام کاربری و پسورد بیابد. اگر یافت شود، در عوض ساخت اتصال جدید، شناسه(id)  ان اتصال باز برگردانده می شود.

دوم، بعد از اتمام اسکریپت، اتصال به سرور SQL  بسته نمی شود. در عوض، لینک برای استفاده اینده باز گذاشته می شود (مثلا mysql_close() لینکهایی که با pconnect() باز شده را نمی بندد.)

 

دستور Select پیشرفته

ADOdb ویژگی هایی دارد که سرعت شما را افزایش می دهد. یکی از این ویژگی ها دستور پیشرفته select است. با استفاده از این می توانید کد های خود را بهبود دهید.

select ساده

مثال select ساده:

01

include('adodb.inc.php'); # load code common to ADOdb

02

   $conn = &ADONewConnection('access'); # create a connection

 

03

   $conn->PConnect('northwind'); # connect to MS-Access, northwind DSN

04

 

 

05

   $recordSet = &$conn->Execute('select * from products');

06

 

 

07

   if (!$recordSet)

08

       print $conn->ErrorMsg();

 

09

   else

10

       while (!$recordSet->EOF) {

 

11

           print $recordSet->fields[0].' '.$recordSet->fields[1].'<br>';

12

           $recordSet->MoveNext();

 

13

       }    $recordSet->Close(); # optional

14

   $conn->Close(); # optional

 

selectlimit

فرمول ان اینگونه است:

SelectLimit($sql,$numrows=-1,$offset=-1,$inputarr=false)

 

اگر موفق باشد یک Recordset را برمی گرداند.یک select ساده را اجرا می کند، با شبیه سازی دستور Select در PostgreSQL ، تعداد را به $numrows با شروع از $offset محدود می کند.

مثال:

01

$connection->SelectLimit('SELECT * FROM TABLE',-1,10)

 

نحوه نمایش جدول

نمایش تمام جدول ها با استفاده از ADOdb ساده است. فقط به MetaTables() نیاز دارید. مثال را ببینید:

1

<?php

2

    include('adodb/adodb.inc.php');

 

3

    $db = ADONewConnection('mysql');

4

    $db->debug = true;

 

5

    $db->Connect('localhost', 'root', 'admin', 'scanner');

6

    print_r($db->MetaTables());

 

7

?>

 

می توانید مقدار $db->MetaTables() را به یک آرایه تخصیص و با ان کار کنید.

 

نمایش فیلدها

حالا، کدی می نویسیم که تمام فیلدهای جدول و متا داده ان را نمایش می دهد. از MetaColumns() استفاده می کنیم:

01

<?php

02

    include('adodb/adodb.inc.php');

 

03

    $db = ADONewConnection('mysql');

04

    $db->debug = true;

 

05

    $db->Connect('localhost', 'root', 'admin', 'scanner');

06

    $arr = $db->MetaColumns('name_table');

 

07

    echo "<pre>";

08

    print_r($arr);

 

09

    echo "</pre>";

10

?>

 

نحوه نمایش پایگاه های داده

تمام پایگاه های داده اولین اتصال با استفاده از ADOdb را نمایش می دهیم:

01

<?php

02

    include('adodb/adodb.inc.php');

 

03

    $db = ADONewConnection('mysql');

04

    $db->debug = true;

 

05

    $db->Connect('localhost', 'root', 'admin', 'scanner');

06

    $arr = $db->MetaDatabases();

 

07

    echo "<pre>";

08

    print_r($arr);

 

09

    echo "</pre>";

10

?>

 

Cache کردن Recordset

یک ویژگی ظریف در ADOdb ، Cache کردن Recordset است. این کار باعث سریع شدن نتایج پرس و جو می شود.

از چندین متد می توان برای Cache کردن Recordset استفاده کرد:

CacheExecute()
CachePageExecute()
CacheSelectLimit()

CacheExecute()

مانند Execute است، فقط recordset برای $secs2cache ثانیه، در دایرکتوری $ADODB_CACHE_DIR، cache می شود. اگر CacheExecute() دوباره با همان پارامترها، همان پایگاه داده، همان نام کاربری و همان پسورد، فراخوانی شود و Recordset ، کش (cache) شده منقضی نشده باشد، همان recordset کش شده برگردانده می شود.

1

include('adodb.inc.php');

2

include('tohtml.inc.php');

 

3

$ADODB_CACHE_DIR = '/usr/local/ADOdbcache';

4

$conn = &ADONewConnection('mysql');

 

5

$conn->PConnect('localhost','userid','password','database');

6

$rs = $conn->CacheExecute(15, 'select * from table');

 

7

# cache 15 secs

 

CachePageExecute()

فرمول:

CachePageExecute($secs2cache, $sql, $nrows, $page, $inputarr=false)

 

برای صفحه بندی (pagination یا صفحه صفحه کردن) recordset استفاده می شود، صفحه ها از 1 شروع می شود نه صفر.

01

include_once('adodb.inc.php');

02

include_once('adodb-pager.inc.php');

 

03

session_start();

04

 

 

05

$db = NewADOConnection('mysql');

06

$db->Connect('localhost','root','','xphplens');

 

07

$sql = "select * from adoxyz ";

08

 

 

09

$pager = new ADODB_Pager($db,$sql);

10

$pager->Render($rows_per_page=5);

 

CacheSelectLimit()

فرمول:

CacheSelectLimit([$secs2cache,] $sql, $numrows=-1,$offset=-1,$inputarr=false)

مانند SelectLimit است، فقط recordset بازگشتی برای $secs2cache ثانیه، در دایرکتوری $ADODB_CACHE_DIR، cache می شود.

1

$conn->Connect(...);

2

   $conn->cacheSecs = 3600*24; // cache 24 hours

 

3

   $rs = $conn->CacheSelectLimit('select * from table',10);

 

بازدهی این 3 متد انقدر متفاوت است که باید درباره زمان مناسب برای کش کردن صحبت کنیم. هنگامی که سرور پایگاه داده شما خیلی از وب سرور شما کند تر است، و یا پایگاه داده ترافیک شدید دارد، کش کردن مناسب است چون بار روی پایگاه داده را کم می کند. اگر پایگاه داده شما بار چندانی ندارد و خیلی از وب سرورتان سریع تر است، کش کردن کارایی و بازدهی را کاهش می دهد.

 

 

 

 

تگ ها:

دسته بندی ها: مقالات PHP