در این مطلب می خواهیم در مورد متد ()execute به عنوان روش دیگری برای اجرای کوئری ها توسط PDO صحبت کنیم. ()prepare متدی از کلاس PDO است که یک عبارت SQL را برای اجر شدن توسط متد ()execute آماده می کند. رشته کوئری که توسط متد ()prepare آماده می شود می تواند شامل صفر یا چندین پارامتر نامگذاری شده مانند name: باشد. همانطور که می بینید ابتدای پارامتر نامگذاری شده کاراکتر : قرار می گیرد. به طور نمونه می توانیم پارامترهای دیگری مانند age: یا status: یا هر رشته دیگری که ابتدای آن کاراکتر : باشد را استفاده کنیم. همچنین در کوئری هایی که توسط متد ()prepare آماده می شوند تا سپس آنها را بوسیله متد ()execute اجرا شوند می توانیم از صفر یا چندین پارامتر علامت سوال ? استفاده کنیم.

در کد زیر یک رشته کوئری ساده را ایجاد کردیم که درون بخش عبارت WHERE دو متغیر پی اچ پی به نام های email$ و status$ به عنوان مقدار شرط جستجو برای دو ستون email و status فرستاده شده اند. نخستین چیزی که باید توجه کنید این است که وقتی دو متغیر را به عنوان مقدار شرط برای ستون ها تعیین کردیم، پس شاید مقدار متغیرها را از کاربر دریافت کرده ایم. به طور مثال در پنل مدیریتی، مدیر از طریق فرم های اچ تی ام ال به دنبال کاربری ویژه می گردد که این جستجو بوسیله آدرس وضعیت فعال بودن  یا نبودن آن کاربر انجام می شود.

پس ورودی فرم ها به ترتیب درون متغیرهای email$ و status$ نگه داری می شوند و سپس آنها را درون رشته کوئری قرار می دهیم تا کوئری توسط مقدارهای ورودی از فرم ها آماده اجرا شود تا سپس آنها را به متد یا تابع اجرا کننده کوئری بفرستیم. از دید PDO می توانیم کوئری بالا را به متد ()query بفرستیم تا اجرا شده و سپس پاسخ از پایگاه داده به پی اچ پی فرستاده شود.

در رشته کوئری زیر، کوئری نخست بوسیله پارامترهای نامگذاری شده email: و status: و کوئری دوم بوسیله دو پارامتر علامت سوال ? آماده شده اند. توجه کنید که پارامتر ? دارای ترتیب هستند. در ادامه می بینید که دو متغیر email$ و status$ به صورت یک آرایه به متد ()execute فرستاده شده اند. در حالت به کار گیری پارامترهای نامگذاری شده، یک آرایه انجمنی به متد ()execute فرستاده می شود که نام کلیدها، همان نام پارامترهای نامگذاری شده درون رشته کوئری هستند و مقدار هر کلید برابر با نام متغیرهای پی اچ پی است. بنابراین مقدار متغیر email$ جایگزین پارامتر email: و مقدار متغیر status$ جایگزین پارامتر status: در کوئری نخست می شوند.

همچنین در اجرای دوم متد ()execute یک آرایه معمولی شامل دو متغیر email$ و status$ است که مقدار متغیر email$ جایگزین نخستین ? و مقدار متغیر status$ جایگزین دومین ? در رشته کوئری می شود. توجه کنید که ()prepare عضو کلاس PDO است و مقدار برگشتی آن از نوع کلاس PDOStatement است، پس در کدهای زیر شی pdoStatement$ از نوع کلاس PDOStatement است و از این رو بوسیله آن به متد ()execute دسترسی پیدا کرده ایم. در پایان برای دسترسی به تک سطر واکشی شده از پایگاه داده، متد ()fetch از کلاس PDOStatement را فراخوانی کرده ایم.

در کد زیر مثال دیگری را نشان داده ایم که از متد ()fetchAll برای واکشی تمامی رکودهای برگشتی از پایگاه داده استفاده شده است. توجه کنید هر سه متد ()fetch و ()fetchAll و ()execute مربوط به کلاس PDOStatement هستند و از متد ()fetch برای واکشی یک تک سطر از میان رکوردهای برگشتی استفاده می شود در حالی که ()fetchAll  تمامی سطرها را واکشی می کند و از ()execute برای اجرای یک کوئری آماده شده توسط متد ()prepare از کلاس PDO استفاده می شود. همچنین در کدهای زیر از تابع ()count  از زبان پی اچ پی برای بدست اندازه آرایه emps$ استفاده می شود که شامل تمامی رکوردهای واکشی شده توسط متد ()fetchAll است.

تعداد ستون های درون خروجی کوئری

از متد ()columnCount می توانیم تعداد ستون های برگشتی را بدست آوریم. به طور مثال در کوئری بالا سه ستون first_name و last_name و birth_date در کوئری وجود دارند، پس در خروجی کوئری نیز داده های همین سه ستون نشان داده می شوند، بنابراین مقدار برگشتی متد ()columnCount برابر با عدد ۳ خواهد . متد ()columnCount که عضو کلاس PDOStatement است زمانی کاربردی خواهد شد که از کاراکتر* در پیش روی عبارت SELECT استفاده کرده باشیم. در این حالت می توانیم به سادگی توسط متد ()columnCount تعداد ستون های برگشتی را نیز پیدا کنیم. در استفاده از متد ()columnCount دو مورد زیر وجود دارد.

۱ – اگر شی (نمونه یا متغیر) نوع کلاس PDOStatement توسط متد ()query برگشت داده شود، بلافصله می توانیم متد ()columnCount را برای نمایش تعداد ستون های خروجی استفاده کنیم.

۲ – اگر شی (نمونه یا متغیر) نوع کلاس PDOStatement توسط متد ()prepare برگشت داده شود، تا زمانی که متد ()execute فراخوانی نشود، نمی توانیم متد ()columnCount را برای نمایش تعداد ستون های خروجی استفاده کنیم.

متدهای ()query  و ()prepare هر دو عضوهای کلاس PDO هستند که خروجی آنها شی از نوع کلاس PDOStatement است. پس می توانیم به متدهای ()fetch و ()fetchAll و ()rowCount و ()coumnCount و ()columnFetch دسترسی داشته باشیم. در کد زیر نشان دادیم بلافاصله پس از اجرای متد ()query می توانیم توسط ()columnCount تعداد ستون های خروجی را بدست آوریم ولی در مورد ()prepare پس از اجرای متد ()execute می توانیم تعداد ستون ها را بدست آوریم.

همچنین مورد دیگری که باید به آن در کد بالا توجه کنید این است که در خط ۱۳ از کد برای فراخوانی متد ()execute هیچ مقداری یا نام هیچ متغیری به آن فرستاده نشده است که نشان می دهد لزوما نباید حتما در کوئری آماده شده توسط متد ()prepare پارامترهای نامگذاری شده یا پارامترهای ? وجود داشته باشد و چون در کد بالا هیچ پارامتری نیست، پس قاعدتا آرایه ای که فهرست مقدارها یا نام متغیرهای انتسابی به پارامترها را مشخص می کرد نیز به متد ()execute فرستاده نشده است. در پایان به عنوان نتیجه گیری دو روش استفاده از متد ()query و یا آماده سازی کوئری توسط متد ()prepare و سپس اجرای آن توسط ()execute برای اجرای کوئری ها وجود دارند.