ارتباط با سرور

همانطور که در درس های قبل توضیح دادیم، PDO در اصل یک کلاس است. برای ارتباط با سرور، کافیست که از این کلاس یک نمونه ایجاد کرده و پارامترهای لازم برای ارتباط با سرور را به سازنده آن بدهیم. نمای کلی ارتباط با سرور با استفاده از PDO به صورت زیر است:

$connection = new PDO('$host', '$username', '$password');

در کد بالا، host$ اطلاعات سرور، username$ نام کاربری و password$ هم پسوردی است که برای ارتباط با سرور به کار می بریم. که معمولا به صورت رشته تهی می باشد. دقت کنید که دستور اتصال به پایگاه داده در PDO را باید در داخل دستور try catch قرار دهیم تا اگر هنگام اتصال خطا ایجاد شد، بتوانیم خطا را مدیریت کنیم.

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

try 
{
    # MS SQL Server and Sybase with PDO_DBLIB
    $connection = new PDO("mssql:host=$host; dbname=$databaseName, $user, $password");
    $connection = new PDO("sybase:host=$host;dbname=$databaseName, $user, $password");
    
    # MySQL with PDO_MYSQL
    $connection = new PDO("mysql:host=$host;dbname=$databaseName", $user, $password);
    
    # SQLite Database
    $connection = new PDO("sqlite:my/database/path/database.db");
}
catch(PDOException $e) 
{
    echo $e->getMessage();
}

در مثال بالا متغیر connection$ برای نگهداری ارتباط با دیتابیس مورد استفاده قرار می گیرد. برای قطع ارتباط با دیتابیس کافیست این متغیری که دسترسی به دیتابیس را درون آن قرار داده اید را برابر با null قرار دهید :

# close the connection
$connection = null;

همانطور که گفته شد، می توان از استثناءها برای مدیریت خطاهای PDO استفاده کنیم. بدین معنی که همه ی کارهایی که قرار است با PDO انجام دهیم را درون بلوک try/catch قرار دهیم. PDO سه نوع مدل برای خطایابی دارد که با استفاده از متد ()setAttribute قابل استفاده هستند :

    • PDO::ERRMODE_SILENT : در این حالت خودتان باید به خطایابی بپردازید.
    • PDO::ERRMODE_WARNING : یک خطا از نوع warning تولید شده و اجرای برنامه ادامه پیدا می کند.
    • PDO::ERRMODE_EXCEPTION : پیشنهاد می شود از این حالت استفاده کنید. در این حالت هنگام ایجاد خطا، یک استثناء تولید می شود که به وسیله ی بلوک try/catch قابل مدیریت است. با استفاده از شیء PDOException شما می توانید توسط متدهای ()getFile() ،getLine و ()getMessage اطلاعات مربوط به فایل و خط کد و پیام خطایی که تولید می شود را بدست بیاورید.

حال فرض کنید که می خواهیم به سرورمان متصل شویم. همانطور که قبلا هم ذکر شد، هاست ما localhost، نام کاربری root و پسورد ما هم تهی می باشد. پس در نتیجه محتویات فایل PDODemo.php را حذف کرده و کدهای زیر را برای اتصال به سرور در داخل آن بنویسید:

  1: <?php
  2:     try 
  3:     {
  4:         $connection = new PDO("mysql:host=localhost;", "root", "");
  5:         $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6:         echo "Connected to server successfully";
  7:     }
  8:     catch(PDOException $e)
  9:     {
 10:         echo "Connection failed: " . $e->getMessage();
 11:     }
 12: ?>

در کد بالا، اگر خطایی رخ دهد، خطا به قسمت catch ارسال می شود. برای مدیریت خطاها، PDO دارای یک کلاس به نام PDOException می باشد. این کلاس دارای متدهایی است که دلیل وقوع خطا را به ما اطلاع می دهند. برای استفاده از این کلاس و متدهای آن در قسمت catch یک شیء از آن ایجاد می کنیم. در داخل بدنه catch هم برای نمایش خطاهای احتمالی، متد ()getMessage را فراخوانی می کنیم. اگر برنامه را اجرا کنید، این پیغام هم نمایش داده می شود که نشان دهنده اجرای کل دستورات داخل بلوک try می باشد :

برای آشنایی با چگونگی به دام افتادن خطاها در قسمت catch هم به صورت عمدی نام کاربری را از root به rot تغییر داده و برنامه را اجرا کنید :

همانطور که در شکل بالا مشاهده می کنید با اجرای برنامه کدهای داخل بلوک catch اجرا شده و پیغامی مبنی بر اینکه کاربری با نام rot وجود ندارد، نمایش داده می شود. در خط 10 به جای متد ()getMessage از متد ()getLine استفاده کرده و دوباره برنامه را اجرا کنید. مشاهده می کنید که این متد شماره خطی که در آن خطا رخ داده است را به شما می گوید. حال که با موفقیت به سرور متصل شدیم، در درس بعد در مورد چگونگی اجرای دستورات SQL توضیح می دهیم.