ODBC يك API ارتباطي مستقل از سيستم عامل و پايگاه داده ها مي باشد كه به يك برنامه سرويس گيرنده امكان مي دهد تا از طريق فراخواني توابع مبتني بر استاندارد به پايگاه داده back – end و بدون تكيه بر پروتكل هاي ارتباطي اختصاصي مختص پايگاه داده ارتباط برقرار كند .
چرا اين مهم است ؟ چرا نبايد فقط با Oracle يا SQL Server يا Informix كار كرد و كار را با آنها به پايان برد ؟ چندين دليل وجود دارد . مشخص نبودن سكو و پايگاه داده در يك برنامه ، قابليت حمل و آزادي را فراهم مي كند . اهميت اين آزادي وقتي به سرعت مشخص مي شود كه محدوديت هاي فقط يك پايگاه داده و سكو را در مورد مقياس پذيري ، سرعت ، گواهي يا هر عامل متغير ديگري بين سيستم هاي توليد مختلف در نظر بگيريم . ODBC همچنين امكان ايجاد برنامه ها بر روي محيط هاي ايجاد و توسعه desktop را با حداكثر استفاده روي سكو فراهم مي كند .

همچنين هر پايگاه داده اي براي هر كاري خوب نيست . MySQL به شكل كنوني خود يك پايگاه داده فقط خواندني است كه براي سايت هاي وب ، محتويات را فراهم مي كند ، ولي ممكن است ترجــيح دهيد كه براي يك warehouse داده ها يا Virtuoso ازOracle به عنوان پايگاه داده استفاده كنيد .

تاريخچــه و اهداف ODBC :
حدود سال ۱۹۹۰ ، عرضه كنندگان پايگاه داده UNIX شامل Oracle ، Informix و IBM به عنوان بخشي از SQL Access Group ، يك CLI (Call – Level Interface) را ارائه كردند تا امكان استفاده از SQL را به روش قابل انتقال فراهم كند .

قبل از SAG CLI ، تنها راه استفاده از SQL به صورت Embedded SQL بود ، به اين معني كه دستورات SQL در زبان برنامه نويسي شما مي بايستي از يك پيش كامپايلر مختص زبان رد مي شد كه دستورات را به زبان API پايگاه داده مورد نظر مي شكست . Embedded SQL ، دست و پا گير بود و عرضه كنندگان پايگاه داده در SAG و گروه X/Open مربوطه جمع شدند تا يك واسط SQL قابل حمل را ايجاد كنند كه بتواند بين پايگاه داده هاي مختلف و بدون پيش كامپايلر خاص زبان مورد استفاده قرار گيرد .

SAG CLI مبتني بر يك زير مجموعه از مشخصات SQL بنام Static SQL مي باشد كه ANSI SQL86 نيز ناميده مي شود . اين مشخصه طوري گسترش يافت كه Dynamic SQL را نيز پوشش داد و عرضه كنندگان مختلفي مثل IBM و Informix به سرعت اين CLI را به عنوان استاندارد بدون چون و چرا ، براي SQL در پايگاه داده هاي خود اتخاذ كردند .
در سال ۱۹۹۲ ، مايكروسافت ، SQL CLI را در يك مجموعه از واسط ها به نام ODBC پياده سازي كرد و SAG CLI را طوري گسترش داد كه شامل توابعي براي پرس و جو و كنترل درايورها و دستيابي به كاتالوگ پايگاه داده شود . مايكروسافت با درك اين مطلب كه يك مجموعه از ابزارهاي گرافيكي و SDK ها اتخاذ را ممكن مي كنند ، قابليت استفاده از SAG CLI را بهبود بخشيد و شروع به حمايت شديد از ODBC در برابر شركاء و مشتريان خود كرد .

بعد از چند سال ، مايكروسافت OLE – DB را به عنوان جايگزين ODBC پياده سازي كرد . OLE – DB در ابتدا مي تواند به صورت يك لايه آبجكتي تلقي شود كه به ODBC اضافه شده است ، ولي مايكروسافت خيلي زود درايورهاي OLE – DB را پياده سازي كرد كه نياز به پشتيباني از ODBC نداشتند . اين مي تواند به عنوان يك حركت تجاري استراتژيك براي كنترل دستيابي به داده ها توسط مايكروسافت تلقي شود ، زيرا OLE – DB فقط به سكوي ويندوز محدود است ، ولي اين ناموفق بود . ODBC استاندارد بدون چون و چرا براي دستيابي به موتورهاي مبتني برSQL شده بود و براي رابطه هاي بين سكويي به كار مي رفت .

معمــاري ODBC :

معماري ODBCاز چند بخش تشكيل شده است . بياييد با شروع از سرويس گيرنده در يك اتصال ساده حركت كنيم . براي اين بحث ، سرويس گيرنده را به وسيله محل برنامه ( مثلا PHP ) شناسايي مي كنيم .
برنامه PHP مثل يك سرويس گيرنده براي سرور پايگاه داده عمل مي كند . با حركت از PHP در طول اين اتصال معمولا به يك Data Source Name ( DSN ) ، درايور ODBC ، مدير درايور ( DM ) ODBC ، يك لايه ارتباطي و خود سرور پايگاه داده ، برخورد مي كنيم :

درايور MyODBC براي MySQL ، درايور MS براي MS Access و درايورهاي OpenLink ODBC ، مثال هايي از درايور ODBC هستند . مديرهاي درايور شامل Microsoft ODBC administrator روي ويندوز و Iodbc تحت nix مي باشند .
در اينجا تفاوت اساسي بين DM در ويندوز و DM در برخي اشكال لينوكس يا يونيكس وجود دارد . ODBC administrator تحت ويندوز به همراه سيستم عامل موجود است و يك محصول closed source است و اين خبر بدي است . ولي خبر خوب اين است كه اين مدير در هر سيستم ويندوزي موجود است . برنامه نويسان PHP با يك سرويس گيرنده UNIX ، Linux و Mac OS X ، ممكن است نياز داشته باشند كه يك مدير درايور را نصب كنند .

يك راه حل ، جايگزين open source بين سكويي كه به وسيله OpenLink Software حفظ مي شود ، Iodbc مي باشد . Iodbc به عنوان يك راه حل جايگزين براي مدير درايور مايكروسافت ايجاد شد و تحت گواهي LGPL يا BSD به صورت رايگان موجود است . اين مدير نه تنها شامل كتابخانه هاي مدير درايور مي باشد ، بلكه شامل يك SDK براي ايجاد درايورها يا برنامه هاي سازگار با ODBC و يك واسط گرافيكي مي باشد .

حال به معماري اتصال خود بپردازيم و اجزاي آن را از نظر كاري كه انجام مي دهند ، تعريف كنيم . مدير درايور ، يك مجموعه از پارامترهاي درايور ODBC به نام ( DSN) Data Source Name را ثبت مي كند . PHP در مدير درايور به دنبال DSN مي گردد و بعد پارامترهاي اتصال موجود در آن را به درايور مناسبي كه اتصال را برقرار مي كند ، ارسال مي كند .
لايه ارتباطي كه نشان داده شده است ، بسته به نوع درايور ODBC ي كه استفاده مي كنيد ، مكن است لازم باشد يا لازم نباشد . در برخي درايورهاي ODBC يك پروتكل ارتباطي خاص پايگاه داده ، تعبيه شده است و يا مستلزم اين هستند كه كتابخانه هاي سرويس گيرنده پايگاه داده به همراه PHP موجود باشد . درايورهاي ODBC ديگر شما را قادر مي كنند تا كتابخانه هاي سرويس گيرنده پايگاه داده را دور بزنيد ، ولي ممكن است مستلزم اين باشند كه شما اجزاي ارتباطي را روي سرور پايگاه داده نصب كنيد . اين مي تواند به ميزان گسترده اي بين درايورهاي ODBC فرق كند .

استانداردهاي SQL :

ODBC معمولا از مشخصات SQL92 پشتيباني مي كند . يك درايور ODBC كه خوب پياده سازي شده باشد قابليت SQL اضافي را روي پايگاه داده هاي back – end اعمال مي كند ، حتي اگر از آن پشتيباني نكنند . يك مثال خوب در اين زمينه ، cursor ها يا مجموعه نتايج قابل پيمايش مي باشد . يك درايور ODBC خوب ، يك مدل را با چند cursor پياده سازي خواهد كرد كه هم به سمت جلو و هم به سمت عقب قابل پيمايش باشد و نيز نسبت به تغييرات در داده هاي مربوطه ، حساس باشد . به طور ايده آل ، يك ODBC Driver از طزيق پياده سازي ODBC API ، مسائل همخواني با SQL در پايگاه داده مربوطه را از ديد برنامه نويس پنهان مي كند .
بااين حال ، هنوز محدوديت هايي روي قابليت پايگاه داده مورد استفاده قرار دارد . براي مثال ، هيچ درايور ODBC و پايگاه داده MySQL 3.x را قادر نخواهد كرد كه كليدهاي خارجي يا stored procedure ها را مديريت كند .

نصب PHP و ODBC بر روي ويندوز :

نصب ODBC تحت ويندوز قبلا انجام شده است ، زيرا مايكروسافت ، ODBC را به عنوان بخشي از سيستم عامل در يك بسته بنام MDAC ( Microsoft Data Access Components ) نصب مي كند . MDAC نه تنها شامل ODBC administrator مي باشد ، بلكه شامل يك مجموعه از درايورهاي ODBC استاندارد و DLL هاي لازم مي باشد .
در ضمن ديگر لازم نيست كه دستورات php – odbc.dll را در فايل php.ini از حالت توضيحات در آوريد . زيرا ODBC به صورت پيش فرض در نصب PHP روي ويندوز، فعال است . پيكربندي DSN ها در ODBC administrator صورت مي گيرد . PHP به DSN ها احتياج دارد كه بر حسب تعريف ، در دسترس همه كاربران روي ماشين قرار دارد .

API براي ODBC در PHP :

حال كه ديد كلي در مورد ODBC پيدا كرديد و پيش نيازها را درك كرديد ، مي توانيم به توابع PHP كه براي كار با API ODBC به كار مي روند بپردازيم . در زير پر استفاده ترين توابع ODBC در PHP را شرح مي دهيم . براي كسب ليست كامل و يا جزئيات بيشتر در مورد مواردي كه در زير ليست شده اند ، به مستندات online در آدرس http://www.php.net/odbc/ مراجعه كنيد .
اين توابع به چهار گروه اصلي تقسيم مي شوند : اتصال ، متاداده ها ، تراكنش ها و بازيابي داده ها . بايد توجه شود كه PHP با اختصاص دادن خروجي پرس و جو ها و دستورات پايگاه داده اي ديگر به شناسه هاي نتيجه ، با داده ها كار مي كند . شناسه نتيجه به وسيله بسياري از توابعي برگردانده مي شود كه به عنوان يك نقطه ارجاع به يك مجموعه از داده هاي ايجاد شده توسط دستور SQL عمل مي كنند . به طريق مشابه ، PHP از شناسه هاي اتصال براي ارجاع به يك اتصال پايگاه داده باز استفاده مي كند .

اتصال به پايگاه داده :

مجموعه اول از توابع ، مراحل اوليه اي كه در هنگام كار با ODBC در كد PHP خود انجام مي دهيد را پوشش مي دهد .
odbc-connect()
Int odbc-connect(string dsn, string user,
String password [, int cursor-type])
اين تابع بر اساس پارامترهاي مشخص شده در connection string ، يك اتصال به يك ODBC DSN برقرار مي كند و در صورت موفقيت يك شناسه به اتصال را به صورت يك عدد مثبت و در صورت عدم موفقيت ، مقدار صفر را برمي گرداند .

odbc-close-all() و odbc-close()
Void odbc-close(int connection-id)
Void odbc-close-all()

هر دوي اين توابع ، اتصالات ODBC را مي بندند . odbc-close() يك شنلسه اتصال را به عنوان آرگومان خود مي گيرد و odbc-close-all() روي تمام اتصالات باز ODBC عمل مي كند . ممكن است بخواهيد كه خود را نگران استفاده از اين توابع نكنيد . وقتي كه اسكريپت به پايان مي رسد ، اتصالات به صورت خودكار بسته مي شوند . اگر تراكنش هاي باز روي شناسه اتصال وجود داشته باشد ، اين توابع با شكست مواجه مي شوند و اتصال را باز مي گذارند .

odbc-pconnect()
Int odbc- pconnect(string dsn, string user,
String password [, int cursor-type])

اين تابع يك اتصال دائمي را باز مي كند . تفاوت اصلي بين اين تابع و تابع odbc-connect() اين اسـت كه اتصال هايي كه با پارامتـرهاي اتصال يكسان باز مي شونــد ،
به جاي باز كردن يك اتصال جديد ، از يك اتصال موجود استفاده خواهند كرد . اين مي تواند به بهبود كارآيي كمك كند ، زيرا به بار اضافي باز كردن مجدد اتصال ، نيازي ندارد . يك تفاوت رفتاري ديگر با odbc-connect() اين است كه وقتي اسكريپت به پايان مي رسد ، اتصال به صورت خودكار بسته نخواهد شد . همچنين odbc-pconnect() در هنگامي كه PHP به صورت يك ماژول CGI نصب شده باشد ، كار نمي كند بلكه مثل odbc-connect() عمل مي كند .

كار با فرا داده ( Meta Data ) :

فراداده ها در حقيقت ، داده هايي درباره داده هاست . در مورد برنامه نويسي پايگاه داده PHP ، از فراداده ها براي كسب اطلاعات در مورد وضعيت پايگاه داده ، چگونگي ايجاد جدول و سطرها و شرايط خطايي كه ممكن است وجود داشته باشد ، استفاده مي كنيم . اين اطلاعات مي توانند فوق العاده سودمند باشند . اين اطلاعات نه تنها به شما كمك مي كند تا برنامه هاي خود را اشكال زدايي كنيد ، بلكه به شما امكان مي دهد تا برنامه هايي بنويسيد كه در آن وضعيت پايگاه داده را در هنگام اجرا تغيير دهيد .
odbc-errormsg() و odbc-error()
string odbc-error([int connection-id])
string odbc-errormsg([int connection-id])

odbc-error() طوري تعريف شده است كه كد خطاي ODBC كه گاهي يك ارجاع ناپيدا به شرط خطاست را برگرداند . در عمل ، هر دو تابع اغلب اطلاعات يكساني ، شامل حالت خطاي ODBC و پيغام خطا را بر مي گردانند . پارامتر connection-id اختياري است و اگر از آن استفاده نشود ، تابع آخرين حالت خطاي يك اتصال را بر مي گرداند . اگر هيچ شرط خطاي فعالي وجود نداشته باشد ، يك رشته تهي برگردانده مي شود .

odbc-field-name()
string odbc-field-name(int result-id, int field-number)
اين تابع يك شماره ستون ( فيلد‌) را مي گيرد و اسم فيلد را در هر موقعيت بر مي گرداند ( شماره گذاري فيلدها از يك شروع مي شود ) .
odbc-field-num()
int odbc-field-num(int result-id, string field-name)
اين تابع برعكس تابع odbc-field-name() مي باشد و اسم يك ستون را مي گيرد و شماره آن را برمي گرداند ( شماره گذاري فيلدها از يك شروع مي شود ) .
odbc-field-type()
string odbc-field-type(int result-id, string field-number)
اين تابع يك شماره ستون را مي گيرد و نوع داده آن ستون را برمي گرداند ( شماره گذاري فيلدها از يك شروع مي شود ) .
odbc-field-hen() و odbc-field-precision()
int odbc-field-len(int result-id, int field-number)
string odbc-field-precision(int result-id, int field-number)

اين توابع شبيه هم هستند . هر دو شماره يك ستون را مي گيرند و طول يا دقت آن ستون را برمي گردانند ( شماره گذاري فيلدها از يك شروع مي شود ) . دقــت (Precision ) يعني طول نوع داده اي كه براي آن ستون تعريف شده است .

كار با تراكنش ها ( Manipulating Transactions ) :
تراكنش ، يك مجموعه از دستورات SQL است كه مي خواهيد يا همه با هم انجام شوند و يا هيچكدام انجام نشوند . تا وقتي كه به چيزي مثل تراكنش هاي مدل فكر نكنيد ، اين ممكن است در ابتدا كمي غير منطقي و عجيب باشد .
odbc-autocommit()
int odbc-autocommit(int connection-id [, int onoff])
اين تابع رفتار auto-commit ( اثر كردن خودكار ) را براي يك شناسه اتصال مشخص تنظيم مي كند و مي پرسد . اعمال دستورات SQL در برخي پايگاه داده ها لازم است و نيز در تراكنش ها به كار مي رود . معمولا يك دستور UPDATE , INSERT يا DELETE قبل از اينكه دستور اثر كند ، مي تواند بي اثر شود . غير فعال كردن اين رفتار به چندين دستور امكان مي دهد تا اجرا شوند و موفقيت آنها امتحان شود و يا متوقف شوند . اگر از پارامتر OnOff استفاده نشود ، وضعيت جاري برگردانده مي شود .
odbc-commit()
int odbc-commit(int connection-id)
اين تابع ، شناسه اتصال را به عنوان يك پارامتر مي گيرد و تمام تراكنش هاي معلق روي آن اتصال را اعمال مي كند .
odbc-rollback()
int odbc-rollback(int connection-id)
اين تابع تمام دستورات معلق روي شناسه اتصال مشخص شده را بي اثر مي كند و تراكنش را خالي مي كند .

بازيابي داده ها و Cursor ها :
ODBC ، چهار روش براي اجراي دستورات SQL دارد . اين روش ها ، اجراي مستقيم ، اجراي آماده شده ، stored procedure ها و فراخواني هاي كاتالوگ مي باشند .
odbc-exec() و odbc-do()
int odbc-exec(int connection-id, string query-string)
int odbc-do(int connection-id, string query-string)
اين دو تابع ، شبيه هم هستند و هر دو يك شناسه اتصال را به عنوان پارامتر مي گيرند و دستور SQL را مستقيما اجرا مي كنند . يعني اينكه دستور SQL روي يك طرح اجرا ، تجزيه و كامپايل مي شود و اين طرح بلافاصله اجرا مي شود . با اينكه اين روش ساده ترين روش براي فرستادن يك دستور SQL است ، بهتر است فقط براي يك دستور SQL يكبار مصرف به كار رود .
odbc-cursor()
string odbc-cursor(int result-id)
اين تابع ، اسم cursor مربوط به يك شناسه نتيجه مشخص را برمي گرداند .
odbc-fetch-into()
int odbc-fetch-into(int result-id [, int rownumber, array result-array])
اين تابع يك شناسه نتيجه را مي گيرد و يك سطر از مجموعه نتايج را در يك آرايه كه اندازه آن با تعداد ستون ها در مجموعه نتايج يكي است ، بازيابي مي كند . آرايه بدست آمده شامل مقاديري با يك انديس عددي است كه از صفر شروع مي شود .
odbc-num-fields()
int odbc-num-fields(int result-id)
اين تابع ، شناسه نتيجه را به عنوان پارامتر مي گيرد و تعداد ستون هاي موجود در مجموعه نتيجه را برمي گرداند .
odbc-num-rows()
int odbc-num-rows(int result-id)

اين تابع براي دستورات INSERT ، UPDATE و DELETE ، تعداد سطرهايي كه تحت تاثير قرار گرفته اند را برمي گرداند و براي دستور SELECT ، تعداد سطرهاي موجود در مجموعه نتايج را برمي گرداند .

مشكلات معمول :

در هر برنامه نويسي به مشكلاتي برخورد خواهيد كرد . رايج ترين مشكلات در رابطه با ODBC و PHP به علت مسائل DSN مي باشند . در زير تعدادي از رايج ترين خطاهاي برگردانده شده توسط تلاش براي اتصال به ODBC و علت احتمالي آنها را مشاهده مي كنيد :

خطـا علت
SQL error: SQL state 01000 in SQL Connect اين يك ” خطاي كلي ” است . DSN ( يا درايور ) شما با شكست مواجه شده است .
Syntax error or access, SQL state 37000 in SQLExecDirect يك خطاي دستور زماني SQL در دستور SQL خود به دنبال خطا بگرديد .

پيش نيازهاي اتصالات ODBC :
اينكه چگونه مي توان اتصالات ODBC را به پايگاه داده هاي ويندوزي ايجاد كرد ، شايد يكي از سوالاتي باشد كه بيشتر از همه در ليست هاي mailing در مورد ODBC پرسيده مي شوند . يك دليل براي اين امر اين است كه برنامه نويسان ويندوزي به طور متوسط بيشتر با ODBC كار كرده اند و مزاياي آن را هم از طريق تجربه مستقيم و هم از طريق معماري مشابه از نظر مفهومي OLE-DB و Active Data Objects ( ADO ) كه در ويژوال بيسيك به كار مي رود درك كرده اند .

استفاده از Ms SQL Server :

از طريق ويندوز ، نصب كمي لازم است . بايد يك DSN را از طريق Start / Setting / Control Panel / Administrative Tools / Data Sourse(ODBC) ايجاد كرد . مي توانيد از Ms driver for SQL استفاده كنيد كه روي اكثر سيستم ها نصب مي شود و يا از يك درايور ODBC از شركت ديگر استفاده كنيد . مي توانيد در برگه Drivers از ODBC administrator ، درايورهايي را كه نصب كرده ايد را مشاهده و بررسي كنيد.

برگه System DSN را انتخاب كنيد و New را انتخاب كنيد . درايور مناسب را از ليست انتخاب كنيد و مقادير مورد نياز در system DSN جديد را پر كنيد . اين پارامترهاي اتصال بايد با معني باشند . اگر نامطمئن هستيد به DBA يا مستندات SQL Server خود مراجعه كنيد . براي كمك به شما ، SQL Server به طور پيش فرض ، يك پايگاه داده نمايشي بنام Northwind با اسم كاربري sa و كلمه عبور خالي نصب كرده است .
استفاده از MS Access :

پيش نياز هاي اتصال با MS Access تحت ويندوز ، با پيش نيازها براي SQL Server يكي است . مطمئن شويد كه يك پايگاه داده كاري MS Access داريد . همچنين وجود يك درايور MS براي Access را بررسي كنيد و يك system DSN ايجاد كنيد .
تحت لينوكس نيز ، پيش نياز هاي اتصال يكسان هستند ، اگر چه نصب DSN كمي ترفند مي خواهد . تفاوت اصلي بين اتصالات Access از طريق لينوكس و اتصالات SQL Server از طريق لينوكس اين است كه هيچ درايور Access ي موجود نيست . براي تاثير گذاشتن روي اين اتصال ، بايد از درايور ODBC چند لايه OpenLink استفاده كنيد . با انتخاب سرويس گيرنده ( Linux ) ، سرور ( ويندوز ) و پايگاه داده ( MS Access ) خود ، اين درايور را از سايت OpenLink ، دريافت كنيد . اين يك ODBC Agent نصب شده بر روي ويندوز را به شما ارائه مي كند كه به جاي مرتبط شدن مستقيم به يك پايگاه داده مي تواند به يك DSN موجود مرتبط شود .

انتزاع پايگاه داده :

ماوراي انتزاع مفهومي پايگاه داده در ODBC ، چند روش در PHP اتخاذ شده است تا برنامه نويس PHP را بيشتر در برابر تغييرات غير قابل پيش بيني پايگاه داده هاي مختلف محافظت كند .
• Unified ODBC
اين شامل يك سري توابع در PHP مي باشد كه ODBC را از نظر مفهومي شبيه سازي مي كند . شايان ذكر است كه اگر واقعا از يك درايور و ODBC DSN استفاده نمي كنيد ، از ODBC API نيز استفاده نخواهيد كرد . كاري كه توابع Unified ODBC انجام مي دهند اين است كه معناي توابع ODBC را فرض مي گيرند و فراخواني هاي اصلي پايگاه داده را در پوشش اسم توابع ODBC ارائه مي كنند . پايگاه داده هايي كه از طريق اين روش پشتيباني مي شوند ، Adsbas ، DB2 ، Solid و Sybase هستند .
• ADODB
اين يك كلاس ديگر Wrapper پايگاه داده شيءگراست كه به ميزان زيادي مثل PEARDB عمل مي كند . ADODB مخفف Active Data Objects Data BASE مي باشد و از نظر قابليت ADO-like مربوط به آن ، براي برنامه نويسان ASP آشناست .

• PEARDB
PEAR مخزن كد مشترك در PHP است . اين يك پروژه آرماني است كه هنوز در دوران اوليه حيات خود به سر مي برد . پروژه PEAR‌ در حال حاضر روي دو چيز تمركز كرده است . ابتدا ، مشخص كردن استاندارد هاي كد كردن براي مخزن و دوم ، ايجاد ابزارهايي براي فراهم كردن يك بنياد چارچوب تشكيل دهنده با ثبات براي مخزن .
يكي از ابزارهاي تشكيل دهنده اي كه در حال ايجاد شدن مي باشد ، PEARDB است كه يك لايه انتزاع پايگاه داده شي گرا براي PHP مي باشد .

• Metabase
Metabase يك مجموعه شيءگرا از كلاس ها از يك شركت ديگر براي دستيابي و مديريت داده ها به روش مستقل از پايگاه داده ها مي باشد . اين روش ريزه كاري هايي دارد كه متد هاي ديگر ندارند و ممكن است براي اكثر پروژه ها ، نياز به مهارت زيادي داشته باشد . اين قابليت ها شامل يك كتابخانه توابع كه واسطي براي درايورهاي خاص پايگاه داده ها فراهم مي كند و پشتيباني از تعريف داده هاي مبتني بر Schema ي XML و يك تجزيه كننده XML براي ايجاد Schema مي باشند .

آشنايي با مفاهيم ADO و ODBC :

اشياء داده هاي ActiveX يا ADO يك واسطه برنامه نويسي ما بين صفحات پايگاه داده هاي مبتني بر وب و منابع مختلف داده ها است . ADO نيز مانند منابع داده هاي زيرين خود داراي مجموعه اي گسترده از اشياء ، خواص و متد هاست .
اتصال پايگاه داده هاي باز ( ODBC ) يك منبع داده هاست كه امكان دسترسي به بسياري از سيستم هاي مديريت پايگاه داده ها ، از جمله اكسس و SQL Server را فراهم مي آورد .
نمودار شكل زير نحوه گردش اطلاعات در جريان پردازش يك صفحه پايگاه داده هاي
مبتني بر وب را نمايش مي دهد . اين فرايند در چندين مرحله و چند سطح ، به شرح زير ، انجام مي شود :

.
لايه هاي نرم افزاري درگير در پردازش صفحات پايگاه داده هاي مبتني بر وب

۱٫ يك بازديد كننده وب با تسليم كردن درخواست خود به سرور وب ، فرايند را آغاز مي كند . معمولا بازديد كننده اين كاررا از طريق كليك كردن بر روي يك ابر لينك يا دكمه submit ، در تماشاگر خود ، انجام مي دهد .
۲٫ سرور وب ، درخواست را دريافت مي كند و چون مشاهده مي كند كه صفحه وب درخواستي داراي پسوند .ASP است ، پردازنده اسكريپت ASP را به راه مي اندازد .
۳٫ پردازنده اسكريپت ASP شروع به خواندن صفحه درخواستي مي كند و دستورات اسكريپت سمت سرور موجود در آن را ، اجرا مي كند .
۴٫ دستورات اسكريپت سمت سرور ، اشياء مختلف ADO را بار مي كنند ( يعني موارد جديدي از آنها را ايجاد مي كنند ) و سپس با به كارگيري متدهاي ارائه شده توسط اين اشياء داده هاي موجود در منابع داده هاي سرور را مورد دسترسي قرار مي دهد .

۵٫ ODBC يكي از اين منابع داده هاست . ADO به بيشتر سيستمهاي پايگاه داده هاي رابطه اي ، و البته نه به همه آنها ، از طريق ODBC ، دسترسي مي يابد . منابع داده هاي ODBC ، امكانات لازم براي باز كردن پايگاه داده ها ، باز كردن جدول ها ، پردازش دستورات SQL و انجام ساير كارها را در اختيار قرار مي دهند .
۶٫ ADO ، چه مستقيما و چه از طريق منبع داده ها ، دستورات لازم را به تامين كننده داده ها ارسال مي كند . تامين كننده داده ها يك لايه نرم افزاري است كه مستقيما با پايگاه داده ها ارتباط برقرار مي كند .

۷٫ سرانجام ، دستورات لازم توسط تامين كننده به پايگاه داده ها ارسال مي گردند و پايگاه داده ها پس از اجرا كردن دستورات ، نتايج آن را به تامين كننده باز مي گرداند . سپس نتايج حاصل توسط تامين كننده ، مستقيما يا از طريق منبع داده هاي ODBC ، به اشياء ADO ارسال مي گردند . ADO بلافاصله كد وضعيت را به دستورات ASP ارسال مي كند و درصورتيكه در نتيجه اجراي دستور ، ركوردهايي حاصل شده باشند ، امكان انجام عمليات بر روي آن ركوردها را نيز در اختيار اسكريپت قرار مي دهد . در نهايت پس از اجراي دستورات اسكريپت ، صفحه اي ساخته مي شود كه نتيجه كار را به بازديد كننده ، نمايش مي دهد .