اجرای دستورات در PDO

تا کنون در مورد نحوه ارتباط با بانک اطلاعاتی بحث کردیم. در این درس و درس های آینده می خواهیم در مورد نحوه اجرای دستورات MySQL بر روی بانک اطلاعاتی به شما توضیحاتی ارائه دهیم. بسته به هدف شما، سه روش مختلف برای اجرای دستورات MySQL بر روی بانک اطلاعاتی وجود دارد :

  • اجرای یک دستور بدون مجموعه جواب : وقتی دستوراتی مانند INSERT، UPDATE و DELETE بر روی بانک انجام می دهیم هیچ مجموعه جوابی برگشت داده نمی شود. در این مورد از متد ()exec برای به دست آوردن تعداد سطرهایی که تحت تاثیر دستور قرار گرفته اند، استفاده می شود.
  • اجرای یک دستور برای یک بار : در هنگام اجرای یک دستور که یک مجموعه از نتایج را برمی گرداند، باید از متد ()query استفاده کنید. این متد یک مجموعه از اشیاء PDOStatement را بر می گرداند.
  • اجرای یک دستور برای چندین بار : با وجود آنکه می توان از متد ()query در داخل یک حلقه while برای به دست آوردن تمامی مقادیر موجود در بانک استفاده کرد، اما این روش را توصیه نمی کنیم. به جای این کار می توانید از دستورات آماده یا prepared statement استفاده کنید. PDO دارای دو متد به نام های execute() و prepare() می باشد که این کار را برای شما انجام می دهند. در مورد کار با این متدهای در درس های آنده توضیح می دهیم.

 

متد ()exec

این متد یک دستور را بر روی بانک اجرا کرده و تعداد سصرهای تحت تاثیر را بر می گرداند. به مثال زیر توجه کنید :

<?php
    $dsn      = 'mysql:dbname=university;host=localhost';
    $username = 'root';    
    $password = '';

    try
    {
        $conn = new PDO($dsn, $username , $password);
        $conn ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    } 
    catch (PDOException $e) 
    {
        echo 'Connection failed : ' . $e ->getMessage();
    }
    
    $query = "UPDATE students SET FirstName='bill' WHERE studentID=10";
    $affectedrows = $conn->exec($query);
    echo "Total rows affected: $affectedrows";

    $conn = null;
?>
Total rows affected : 1

به این نکته توجه کنید که دستور SELECT را به این متد ارسال نکنید. یعنی برای اجرای دستور SELECT از این متد استفاده نکنید.

 

متد ()query

این متد یک دستور SQL را اجرا کرده و نتایج را به صورت اشیاء PDOStatement بر می گرداند. به مثال زیر توجه کنید :

<?php
    $dsn      = 'mysql:dbname=university;host=localhost';
    $username = 'root';    
    $password = '';

    try
    {
        $conn = new PDO($dsn, $username , $password);
        $conn ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    } 
    catch (PDOException $e) 
    {
        echo 'Connection failed : ' . $e ->getMessage();
    }
    
    $query = "SELECT FirstName, LastName FROM students ORDER BY studentID";    
    foreach ($conn->query($query) as $row) 
    {
        $firstname = $row['FirstName'];
        $lastname  = $row['LastName'];
        echo "$firstname $lastname <br/>" ;
    }

    $conn = null;
?>
Edward Lyons
Jimmie Vargas
Monica Ward
Joann Jordan
Cheryl Swanson
Clara Webb
Zack Norris
Randall May
Jessica Cole
Oscar Manning

اگر بخواهید اطلاعات بیشتری در مورد رکوردهای تحت تاثیر مانند تعداد آنها به دست بیاورید می توانید از متد ()rowCount استفاده کنید.

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر مطرح بفرمایید.