PHP و پایگاه داده: اتصال به پایگاه داده

08 مرداد 1398
درسنامه درس 21 از سری آموزش PHP 7
PHP و پایگاه داده: اتصال به پایگاه داده

اتصال به پایگاه داده در PHP

همانطور که می دانید پایگاه داده مکانی است برای ذخیره ی اطلاعات وب سایت شما (مانند حساب کاربری افراد، سابقه ی خریدها، کامنت ها و...). البته پایگاه های داده مخصوص وب سایت ها نیستند بلکه یک مرکز هواشناسی می تواند پایگاه داده ای برای ثبت و ضبط تغییرات آب و هوایی نیز داشته باشد. بنابراین اگر بخواهیم به طور کلی بگوییم پایگاه داده یا دیتابیس (database) مکانی برای ذخیره ی اطلاعات است.

پایگاه های داده ی مختلفی در دنیای وب وجود دارد که قبلا آن ها را به طور اجمالی بررسی کرده ایم اما از بین آن ها پایگاه داده ی MySQL یکی از مشهورترین ها محسوب می شود که در ایران اکثرا از آن استفاده می شود. اکثر پایگاه های داده از زبان SQL استفاده می کنند اما بعضی از آن ها زبان مخصوص به خودشان را دارند که البته معمولا به زبان SQL نزدیک است. ما در این چند قسمت از پایگاه MySQL استفاده خواهیم کرد.

زبان PHP چند راه برای ارتباط با پایگاه های داده دارد:

  • extension ای به نام MySQLi (به صورت رویه ای)
  • extension ای به نام MySQLi (به صورت شیء گرا)
  • PDO (مخفف PHP Data Objects) که کاملا شیء گرا است.

نکته: extension ای به نام خود پایگاه داده (MySQL) نیز وجود داشت که از سال 2012 منسوخ شده است و به هیچ عنوان نباید از آن استفاده کنید. شما می توانید از هر کدام که خواستید استفاده کنید و بین MySQLi و PDO تفاوت های آنچنانی وجود ندارد اما باید بدانید PDO می تواند با 12 پایگاه داده ی مختلف کار کند اما MySQLi تنها می تواند با MySQL کار کند. بنابراین اگر قصد دارید بعدا پایگاه داده ی خود را تغییر دهید حتما از PDO استفاده کنید.

ما سعی خواهیم کرد که مثال های خود را به هر سه حالت MySQLi رویه ای، MySQLi شیء گرا و PDO ارائه کنیم تا شما با هر سه آشنا شوید. همچنین باید یادآوری کنم که یک دوره ی کامل و پیشرفته برای کار با PDO تدارک دیده ایم که می توانید آن را مطالعه نمایید.

قدم اول برای ارتباط داشتن با پایگاه داده، اتصال به آن است. بنابراین:

مثال اول: اتصال با MySQLi به صورت شیء گرا

<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";
?>

فکر نمی کنم مثال جای توضیح زیادی داشته باشد. به طور خلاصه می توان گفت:

  • servername: نام سرور شما است. در اینجا به طور پیش فرض روی localhost قرار داده شده است اما شما باید هنگام اتصال به پایگاه داده از آدرس سرور خودتان استفاده کنید.
  • username و password: حساب کاربری و رمز عبور شما در پایگاه داده تان هستند. هر پایگاه داده ای برای هر فرد یک حساب و رمز عبور دارد؛ اگر حساب خود را نمی دانید با پشتیبانی هاست خود تماس بگیرید.
  • با کلیدواژه ی new و mysqli و پاس دادن پارامتر های بالا به آن به پایگاه داده متصل می شویم.
  • در آخر گفته ایم اگر با خطایی در اتصال مواجه شدیم عبارت Connection failed نمایش داده شده و سپس نوع خطا را مقابل آن اضافه کند (conn->connect_error$) در غیر این صورت عبارت Connected successfully را نمایش دهد.

نکته: از کد بالا دستور connect_error$ در نسخه های 5.3.0 به قبل از زبان PHP کار نمی کند. بنابراین در صورت بروز هر گونه مشکل یا نسخه ی PHP خود را ارتقاء دهید و یا از کد زیر برای دریافت خطا استفاده کنید:

// Check connection
if (mysqli_connect_error()) {
    die("Database connection failed: " . mysqli_connect_error());
}

مثال دوم: اتصال با MySQLi به صورت رویه ای

<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

همانطور که می بینید دستورات همان دستورات هستند به استثنای برخی از جزئیات مانند نبودن کلیدواژه ی new و استفاده از دستور mysqli_connect.

مثال سوم: اتصال با PDO

<?php
$servername = "localhost";
$username = "username";
$password = "password";

try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
    }
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
?>

از آنجا که PDO با چندین پایگاه داده کار می کند در هر اتصال باید مشخص شود که به چه نوع پایگاه داده متصل می شویم. همچنین PDO باید بداند که نام پایگاه داده ی ما چیست به همین خاطر دستور زیر را داریم:

$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);

یک مثال ساده ی دیگر از اتصال به MySQL در PDO:

<?php
$dbhost = 'localhost';
$dbname='hr';
$dbuser = 'root';
$dbpass = '';
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
?>

نکاتی در رابطه با این مثال:

  • همانطور که در مثال می بینید، معمولا مرسوم است که موارد خواسته شده را در متغیرهایی قرار دهیم و سپس متغیرها را به PDO تحویل دهیم. این روش، روش خوبی است چرا که اگر بعدها بخواهید چیزی را عوض کنید (مثلا رمز پایگاه داده یا آدرس آن را) می توانید به سادگی مقدار متغیر را عوض کنید اما اگر عین مقادیر را در سورس کد خود نوشته باشید، باید تک تک آن موارد را پیدا کرده و به صورت دستی تغییر دهید.
  • با اینکه این دوره برای افراد مبتدی نوشته نشده است و شما باید این مسئله را بدانید اما باز هم تاکید می کنم، هیچ گاه هیچ گاه هیچ گاه نباید پایگاه داده ی شما دارای حساب کاربری root یا رمز root یا بدون رمز باشد. این اشتباه بزرگی است که هک شدن سایت شما یا حداقل پایگاه داده را بسیار آسان می کند. تمام این مقادیر پیش فرض باید عوض شوند.
  • زمانی که DSN را نوشته و می خواهیم اتصال با پایگاه داده را برقرار کنیم، یک شیء از PDO می سازیم. این روش بهترین روش اتصال است.
  • اگر از پایگاه های داده ی دیگری مثل PostgreSQL استفاده می کنید باید driver را تغییر دهید. database driver در واقع همان عبارت mysql است که تعیین می کند PDO قرار است به چه پایگاه داده ای متصل شود. مثال:
<?php
$dbuser = 'postgres';
$dbpass = 'abc123';
$host = 'localhost';
$dbname='postgres';
$dbh = new PDO("pgsql:host=$host;dbname=$dbname", $dbuser, $dbpass);
?>

ما این نوع کد را به طور کامل در مقاله ی «اتصال به پایگاه داده PDO – Credentials در PHP» و در کل سری آموزشی مربوطه توضیح داده ایم. لطفا برای اطلاعات بیشتر این قسمت را مطالعه کنید.

یکی از خوبی های PDO همین است که یک کلاس exception جداگانه دارد تا تمامی خطا های مربوط به پایگاه داده را مدیریت کند. اگر exception ای در بلوک try پرتاب (throw) شود اجرای اسکریپت متوقف شده و مستقیما به اولین بلوک { }()catch می رود.

بستن پایگاه داده در PHP

برای قطع اتصال به پایگاه داده در PHP تنها کافی است یکی از کدهای زیر را بر اساس رابط خود انتخاب کنید:

MySQLi به صورت شیء گرا:

$conn->close();

MySQLi به صورت رویه ای:

mysqli_close($conn);

PDO:

$conn = null;

امیدوارم از این مقاله لذت برده باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PHP 7 توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.