PHP

آموزش کار با دیتابیس ها در zend framework

تبلیغات
کانال تلگرام فتولیا
4 سوالی شهرداری

سلام ;

در بخش اول آموزش زند فریم ورک  ،نحوه نصب و ایجاد یک سایت ساده را یاد گرفتیم .اما برای کارهای بزرگتر ، باید اطلاعات جامعی تر در مورد این فریم ورک داشته باشیم.برای همین در این بحث می خواهیم در مورد نحوه کار با دیتابیس در زند توضیحاتی بدهیم .لطفا با ما باشید .در ابتدا از goback عزیز (http://goback.blogfa.com) که زحمت ترجمه این مقاله رو کشیدند ، تشکر می کنم.

Zend_Db

کتابخانه Zend_Db_Adapter به ما این امکان را می دهد تا با سیستم های مختلف بانک اطلاعاتی (DBMS) ها کار کنیم.

استفاده از درایورهای PDO

  • برای استفاده از RMDB2 و IDS از اکستنشن pdo_ibm استفاده می شود.
  • برای استفاده از MYSQL از اکستنشن مربوط به PHP با نام pdo_mysql  استفاده می شود.
  • برای استفاده از MSSQLاز اکستنشن pdo_mssql استفاده می شود.
  • برای استفاده از Oracle از اکستنشن pdo_oci استفاده میشود.
  • برای استفاده از PostgreSQL از اکستنشن pdo_pgsql استفاده میشود.
  • و برای استفاده از SQLite از اکستنشن مربوط به PHP با نام pdo_sqlite  استفاده خواهد شد.

استفاده از اکستنشنهای PHP

  • برای استفاده از MySQL از اکستنشن mysqli  استفاده می شود.
  • برای استفاده از Oracle  از اکستنشن مربوط به PHP با نام oci8  استفاده میشود.
  • برای استفاده از IBM DB2از اکستنشن ibm_db2 استفاده می شود.
  • برای استفاده از Firebird / Interbase از اکستنشن php_interbase استفاده میشود.

ما در این مقاله از درایورهای PDO برای کار با MySQL استفاده می کنیم.

شروع کار

برای ذخیره اطلاعات مربوط به نحوه اتصال به دیتابیس ،به یک فایل تنظیمات نیاز داریم،برای این کار ما یه فایل با نام application.ini در مسیر /application/configs می سازیم، حالا خطوط زیر رو به فایل مربوطه اضافه کنید:

 

 

فکر نمی کنم محتویاتی که نوشتیم خیلی برای تان سخت باشد.ما از Zend_Confg_Ini برای خوندن این فایل استفاده خواهیم کرد ولی باید قبل از عملیات dispatching ،ارتباط با دیتابیس برقرار شده باشد.خوب کد زیر را داخل فایل  index.php بنویسید:

 

‫اگر یک موقع دلتان نخواست که مقدار برگشتی از دیتابیس به صورت شی(object) باشد، می‌توانید از یکی از روش های زیر استفاده کنید:

Zend_Db:: FETCH_ASSOC : نتیجه را به مقادیری با آرایه های انجمنی(associative) میدهد،کلیدهای آرایه نام ستونها خواهند بود،این روش استخراخ به صورت پیشفرض در کلاسهای Zend_Db_Adapter استفاده می شود.
Zend_Db:: FETCH_NUM :نتیجه را به صورت آرایه ای از مقادیر با ایندکس های عددی برمیگرداند،این ایندکس ها به ترتیب موقعیت فیلدهایی هستند که در کوئری select تعیین شده اند.
Zend_Db:: FETCH_BOTH :این نتیجه را به صورت آرایه برمیگرداند،کلیدهای آرایه انجمنی و مقادیر عددی هستند،تو آرایه اگر از FETCH_ASSOC یا FETCH_NUM استفاده شود، تعداد المنتها دوبار می شوند .
Zend_Db:: FETCH_COLUMN :نتیجه را به صورت آرایه ای از مقادیر برمیگرداند، ‫‏مقداری از مقدارهای ‫‫یک ستون از مجموعه نتایج در هر آرایه.به صورت پیشفرض ستون اولی با صفر شماره گذاری می شود.
Zend_Db:: FETCH_OBJ :نتیجه را به صورت آرایه ای از اشیاء برمیگرداند،به صورت پیشفرض کلاس توکار stdClass که در خود PHP هست استفاده میشود.ستونهای نتیجه به صورت public در این شی در دسترس هستند.

شاید کجنجکاو شده باشید بدونید که چرا ما adapter را داخل registry ثبت کردیم.خب این کار برای این بود که به این adapter در همه ی کنترلر ها و مدلها دسترسی داشته باشیم.برای دسترسی به adapter از registry ما از متد Zend_Registry::get(); استفاده میکنیم.

خب اجازه بدید یه درخواست به دیتابیس را اجرا کنیم

محتوای متغیر $result از آرایه ای از آبجکتها خواهد بود،برای استخراج یک ستون از این نتایج ،باید به این صورت عمل کنیم:

حالا متغیر $result فقط حاوی ستون name هست،برای استخراج یه سطر به تنهایی از کد زیر استفاده می کنیم:

 و حالا مقدار $result یک شی بیشتر نیست ! .و برای بیرون کشیدن یک مقدار به تنهایی هم از زیر بهره می بریم.(چیزی شبیه به متغیر mysql_result در php) :

 و حالا نیز تعداد کاربران در متغیر $result قرار دارد.همه این پرس و جوهایی را که اجرا کردیم ، با select بودند ولی در ادامه می خواهیم نگاهی هم به روش افزودن ، ویرایش و حذف داده ها بیندازیم .لطفا با ما باشید.

افزودن رکوردها

در زند ،یک تابع خاص برای اضافه کردن اطلاعات به دیتابیس وجود دارد.متدی با نام Insert از کلاس Zend_Db :

 

اینجا باید دو پارامتر را به متد insert بدهیم،اولی اسم جدول و دومی یک آرایه انجمنی شامل نام فیلد ها و مقادیر هر کدام است.متد  lastInsertId مقدار مربوط به فیلدی که primary هست و خاصیت auto-increment دارد را برمیگرداند.

ویرایش رکوردها

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

 

نکته : فقط یادتان باشد ،اگر این آرگومان سوم را ندهید،کل جدول تان به فنا خواهد رفت و همه رکوردها آپدیت می شوند

خذف رکوردها

برای حذف اطلاعات از متد delete استفاده می کنیم،این متد دو پارامتر میگیرد،اولی اسم جدول و دومی شرط مربوطه است،اینجا هم باید دقت کنید،اگر آرگومان دوم رو ندهید، کل داده های جدول حذف می شوند!

نکته : فقط یادتان باشد ،اگر این آرگومان سوم را ندهید،کل جدول تان به فنا خواهد رفت و همه رکوردها حذف می شوند

 تعدادی مثال از کدها

مثال ۱ :

مثال ۲ :

مثال ۳ :

مثال ۴ :

 

Zend_Db_Select

 

Zend_Db_Select ابزاری برای ایجاد فوری کوئری های select به صورت تکه تکه است که کار ما را در انجام کوئری های پیچیده آسان می کند.

ایجاد کوئری ها 

برای مثال ،اگر بخواهیم یک پرس و جو ایجاد کنیم که اخبار را از جدول بیرون بکشیم ، کاری شبیه این انجام می دهیم:

 ولی با استفاده از Zend_db_Select ، همین کار را به این شکل انجام می دهیم :

حالا اگر بخواهیم همه ی رکوردهای مربوط به اخبار را بیرون بکشیم ،ولی کلا در قالب سه ستون سال،ماه و روز باشد،اینطوری مینویسیم:

SQL روشهای مختلفی برای عملیات join دارد ،در لیست زیر متدهایی از Zend_Db_Select هست که این عملیات مختلف را ساپورت میکند:

  • INNER JOIN, methods join (table, join, [columns]) and joinInner (table, join, [columns]).
  • LEFT JOIN, the method joinLeft (table, condition, [columns]).
  • RIGHT JOIN, the method joinRight (table, condition, [columns]).
  • FULL JOIN, the method joinFull (table, condition, [columns]).
  • CROSS JOIN, the method joinCross (table, [columns]).
  • NATURAL JOIN, the method joinNatural (table, [columns]).

یک بخش دیگر از آموزش های فریم ورک زند تمام شد .امیدوارم مورد استفاده علاقه مندان قرار گرفته باشد.

لطفا ما رو از نظرات تون بهره مند کنید :)

منبع

5 Comments

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

    1. سلام goback عزیز

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

      به هر حال ممنون
      موفقیت

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

آخرین مقالات فتولیا در ایمیل شما

در خبرنامه ما عضو شوید و آخرین مطالب و مقالات آموزشی را اول شما دریافت کنید