همانطور که می دانید پایگاه داده مکانی است برای ذخیره ی اطلاعات وب سایت شما (مانند حساب کاربری افراد، سابقه ی خریدها، کامنت ها و...). البته پایگاه های داده مخصوص وب سایت ها نیستند بلکه یک مرکز هواشناسی می تواند پایگاه داده ای برای ثبت و ضبط تغییرات آب و هوایی نیز داشته باشد. بنابراین اگر بخواهیم به طور کلی بگوییم پایگاه داده یا دیتابیس (database) مکانی برای ذخیره ی اطلاعات است.
پایگاه های داده ی مختلفی در دنیای وب وجود دارد که قبلا آن ها را به طور اجمالی بررسی کرده ایم اما از بین آن ها پایگاه داده ی MySQL یکی از مشهورترین ها محسوب می شود که در ایران اکثرا از آن استفاده می شود. اکثر پایگاه های داده از زبان SQL استفاده می کنند اما بعضی از آن ها زبان مخصوص به خودشان را دارند که البته معمولا به زبان SQL نزدیک است. ما در این چند قسمت از پایگاه MySQL استفاده خواهیم کرد.
زبان PHP چند راه برای ارتباط با پایگاه های داده دارد:
نکته: extension ای به نام خود پایگاه داده (MySQL) نیز وجود داشت که از سال 2012 منسوخ شده است و به هیچ عنوان نباید از آن استفاده کنید. شما می توانید از هر کدام که خواستید استفاده کنید و بین MySQLi و PDO تفاوت های آنچنانی وجود ندارد اما باید بدانید PDO می تواند با 12 پایگاه داده ی مختلف کار کند اما MySQLi تنها می تواند با MySQL کار کند. بنابراین اگر قصد دارید بعدا پایگاه داده ی خود را تغییر دهید حتما از PDO استفاده کنید.
ما سعی خواهیم کرد که مثال های خود را به هر سه حالت MySQLi رویه ای، MySQLi شیء گرا و PDO ارائه کنیم تا شما با هر سه آشنا شوید. همچنین باید یادآوری کنم که یک دوره ی کامل و پیشرفته برای کار با PDO تدارک دیده ایم که می توانید آن را مطالعه نمایید.
قدم اول برای ارتباط داشتن با پایگاه داده، اتصال به آن است. بنابراین:
<?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"; ?>
فکر نمی کنم مثال جای توضیح زیادی داشته باشد. به طور خلاصه می توان گفت:
نکته: از کد بالا دستور connect_error$ در نسخه های 5.3.0 به قبل از زبان PHP کار نمی کند. بنابراین در صورت بروز هر گونه مشکل یا نسخه ی PHP خود را ارتقاء دهید و یا از کد زیر برای دریافت خطا استفاده کنید:
// Check connection if (mysqli_connect_error()) { die("Database connection failed: " . mysqli_connect_error()); }
<?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.
<?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); ?>
نکاتی در رابطه با این مثال:
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 تنها کافی است یکی از کدهای زیر را بر اساس رابط خود انتخاب کنید:
MySQLi به صورت شیء گرا:
$conn->close();
MySQLi به صورت رویه ای:
mysqli_close($conn);
PDO:
$conn = null;
امیدوارم از این مقاله لذت برده باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.