آموزش PHP - جلسه یازدهم: اتصال به بانک اطلاعاتی MySQL
با اتصال به بانکهای اطلاعاتی تحت سرور میتوانیم دادههای مورد نظرمان را در جداول این بانکهای اطلاعاتی ذخیره کنیم و در مواقع لزوم به سرعت به آنها دسترسی داشته باشیم. همچنین در مواقعی نیاز به بروزرسانی اطلاعات و نیز حذف آنها خواهیم داشت.
پیاچپی از بانکهای اطلاعاتی مختلفی پشتیبانی میکند. اما یکی از محبوبترین و پراستفادهترین بانکهای اطلاعاتی در بین برنامهنویسان از زبان MySQL است. در این جلسه روش اتصال به این بانک داده را با PHP به شما آموزش خواهیم داد و نیز ۴ عملیات اصلی کار با بانکهای اطلاعاتی را به مرور فرا خواهید گرفت.
از این جلسه شروع به ساخت یک CMS (سیستم مدیریت محتوا = Content Managment System) میکنیم. قبل از هر چیز نیاز است الگوریتم سادهای برای این پروژه ایجاد کنید. اما در اینجا برای جلوگیری از سنگین شدن این جلسه بخش الگوریتم را به خودتان واگذار میکنیم.
در کل باید بدانید قصد داریم یک پروژه بسازیم که با بانک اطلاعاتی MYSQL ارتباط داشته باشد و بتوان با استفاده از آن مطالب جدیدی را در بانک داده ذخیره سازی کرد. هدف ما ایجاد بخشی برای ارسال مطلب، بخشی برای ویرایش مطالب ارسال شده، امکان حذف مطالب ارسال شده و نیز نمایش مطالب ارسال شده است. چهار عمل اصلی در ارتباط با بانکهای داده وجود دارد که به اختصار آنها را CURD مینامند. C برای ساختن (Create) و U برای بروزرسانی (Update) و R برای خواندن (Read) و نهایتا D برای حذف (Delete).
اتصال به بانک داده
قبل از این کار یک پوشه جدید در پوشه htdocs نرمافزار Xampp ایجاد کنید و نام آن را cms بگذارید. حالا در پوشه cms یک فایل به نام config.php ایجاد کنید. این فایل در واقع تنظیمات مربوط به سیستم ما را نگهداری خواهد کرد. همچنین از طریق این فایل به بانک داده متصل خواهیم شد.
اما ابتدا باید بانک اطلاعاتی مورد نظرمان را ایجاد کنید. پس از اجرای Xampp در پنل مدیریت این نرمافزار سرویس MySQL را نیز همانند سرویس Apache اجرا کنید.
حالا مرورگر خود را باز کرده و به آدرس http://127.0.0.1/phpmyadmin بروید. در این بخش شما میتوانید بانکهای اطلاعاتی سرور محلی خود را مشاهده، ایجاد و حذف کنید. پس از اجرای آدرس فوق باید با صفحهای مانند زیر مواجه شوید.
همانطور که در تصویر با کادر قرمز مشخص شده، روی Database کلیک کنید. در این بخش میتوانید یک بانک اطلاعاتی جدید بسازید. نام بانک اطلاعات مورد نظر خود را باید در کادر مربوطه همانند تصویر زیر وارد کنید. همچنین نوع یونیکد مورد نظر برای این بانک داده را هم با استفاده از منو کشویی مقابل فیلد نام آن، میتوانید تعیین کنید. از آنجا که زبان ما فارسی است بهترین کار در این مرحله انتخاب یونیکد utf-8 است. پس همانند تصویر زیر نام بانک اطلاعاتی جدید خود را cms و نوع آن را هم utf8-general-ci تعیین کنید.
حال باید جداول مورد نظرتان را ایجاد کنید. اما برای جلوگیری از سنگین شدن مبحث و اینکه هدف ما آموزش php است، جداول مورد نیاز برای این پروژه را ساختهایم و شما نیز برای ساختن این جداول مراحل زیر را پس از ساختن بانک اطلاعاتی یاد شده انجام دهید. پس از اینکه روی دکمه Create کلیک کنید، بانک اطلاعاتی cms ایجاد خواهد شد. حالا وارد بخش sql شوید و همانند تصویری که در ادامه میبینید، کد زیر را در بخش مربوطه قرار داده و سپس بر روی دکمه Go کلیک کنید.
-- phpMyAdmin SQL Dump-- version 4.5.1-- http://www.phpmyadmin.net---- Host: 127.0.0.1-- Generation Time: May 28, 2016 at 02:13 PM-- Server version: 10.1.9-MariaDB-- PHP Version: 5.6.15SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";SET time_zone = "+00:00";/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8mb4 */;---- Database: `cms`---- ------------------------------------------------------------ Table structure for table `posts`--CREATE TABLE `posts` ( `id` int(11) NOT NULL, `title` varchar(200) NOT NULL, `text` text NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;---- Indexes for dumped tables------ Indexes for table `posts`--ALTER TABLE `posts` ADD PRIMARY KEY (`id`);---- AUTO_INCREMENT for dumped tables------ AUTO_INCREMENT for table `posts`--ALTER TABLE `posts` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
کد بالا برای ایجاد یک جدول به نام posts است که این جدول سه فیلد دارد. برای هر مطلب یک فیلد برای شماره مطلب وجود دارد که این شماره برای هر رکورد از جدول یکتا خواهد بود. همچنین یک فیلد برای عنوان و یک فیلد نیز برای متن مطلب در نظر گرفتهایم. یونیکد این جدول و تمامی فیلدهای آن نیز utf8-general-ci است.
اصلا نگران این بخش نباشید چراکه بعدا مفصلا به آن خواهیم پرداخت. فقط به یاد داشته باشید که تا کنون چه کارهایی انجام دادیم.
حالا برگردیم به بخش پیاچپی. فایل config.php را باز کنید و کد زیر را در آن قرار دهید:
$dbhost = "localhost";$dbuser = "root";$dbname = "cms";$dbpass = "";$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);if ($connect_db){ echo "we Connected to db successfully!";}else{ echo "error in connecting db";}?>
در کد بالا ابتدا ۴ متغیر تعریف کرده و آنها را مقداردهی کردیم. برای اتصال به بانکاطلاعاتی mysql در php نیاز به ۴ مشخصه خواهید داشت. آدرس میزبان بانک داده که در اینجا متغیر dbhost است، نام کاربری بانک داده که در اینجا dbuser است، نام بانک داده که در اینجا dbname است و نهایتا رمزعبور کاربر بانک داده که در اینجا dbpass است. در بیشتر مواقع آدرس میزبان بانک داده همان localhost خواهد بود. در نرمافزار زمپ نام کاربری تمام بانکهای دادهای که میسازیم root است و این کاربر رمزعبور ندارد و به همین دلیل مقدار dbpass را خالی گذاشتهایم. نام بانک داده نیز همان نامی خواهد بود که در هنگام ساختن بانک اطلاعاتی مورد نظر خود تعیین کردهاید و در این پروژه نام تعیین شده ما cms بود.
حال باید با استفاده از تابع mysql_connect به بانک داده متصل شویم. این تابع سه آرگومان ورودی دارد که به ترتیب آدرس میزبان بانک داده، نام کاربری بانک داده و رمزعبور کاربر بانک داده هستند. خروجی این تابع نیز یا true خواهد بود یا false. در کد بالا ما خروجی این تابع را در متغیر connect_db ذخیره میکنیم و سپس با یک دستور if بررسی کردهایم که اگر اتصال به درستی برقرار شد پیام مناسب به کاربر نمایش داده شود و اگر اتصال انجام نشده بود پیام خطای عدم اتصال به بانک داده نمایان شود.
پس از اینکه مراحل فوق را انجام دادید یک فایل دیگر به نام index.php در پوشه cms ایجاد کنید. سپس در این فایل کد زیر را قرار دهید:
include ("config.php");?>
همانطور که احتمالا متوجه شدهاید ما فایل config.php را با کد بالا در فایل index,php فراخوانی کردهایم. حالا اگر آدرس http://127.0.0.1/cms/index.php را در مروگرتان اجرا کنید، باید با عبارت we Connected to db successfully! مواجه شوید. در غیر این صورت یکی از مراحل را اشتباه انجام دادهاید، چراکه در این صورت اتصال به بانک داده انجام نشده است. اما اگر پیغام یاد شده را مشاهده میکنید یعنی با موفقیت به بانک داده cms متصل شدهایم. اگر همه چیز به درستی انجام شده بخش if فایل config.php را حذف کنید یا آن را به صورت کامنت درآورید. همچنین یک دستور دیگر برای انتخاب بانک اطلاعاتی cms که آن را در مراحل قبلی ایجاد کردیم به این فایل اضافه میکنیم. در نهایت کد config.php شما باید شبیه به زیر باشد:
$dbhost = "localhost";$dbuser = "root";$dbname = "cms";$dbpass = "";$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);mysql_select_db($dbname,$connect_db);?>
با استفاده از تابع mysql_select_db میتوانید به بانک اطلاعاتی مورد نظر خود در سرور mysql متصل شوید. همانطور که میبینید این تابع دو آرگومان دارد که ورودی اول نام بانک اطلاعاتی که قصد متصل شدن به آن را داریم است و مورد دوم که تعریف آن اجباری هم نیست، به خروجی تابع متصل شدن به سرور MySQL اشاره دارد. در اینجا ما خروجی تابع را در متغیر connect_db قرار داده بودیم و از همین رو در آرگومان دوم تابع mysql_select_db نام این متغیر را وارد کردهایم.
اما برای درک بهتر ادامه این آموزش باید با ساختار جدولی که ساختهایم آشنا شوید. به شکل زیر دقت کنید:
در نتیجه ما یک بانک اطلاعاتی به نام cms داریم. هر بانک اطلاعاتی میتواند شامل چند جدول باشد و هر جدول نیز شامل یکسری فیلد است.
در اینجا جدول ما posts نام دارد و هر سطر آن (هر رکورد) شامل سه فیلد id و title و text است. تعیین نام فیلدها و نوع آنها در هنگام ساخت جدول انجام میشود و در این مورد نامهای انتخابی ما سه موردی بود که اشاره کردیم. همانطور که در تصویر بالا میبینید هر مطلب به صورت یک سطر جدید در جدول posts ذخیره خواهد شد و هر مطلب سه مشخصه id یا شناسه یکتای مطلب، title برای عنوان و text برای متن مطلب را شامل میشود.
در جلسه بعد پروژه خود را ادامه خواهیم داد و رفته رفته آن را کاملتر میکنیم. پیشنهاد میکنیم برای درک بهتر آموزشهای بعدی کمی در مورد بانک اطلاعاتی mysql و نیز دستورات sql در گوگل جستجو کنید و در میان مطالب بسیار زیاد فارسی منتشر شده در این مورد کمی تحقیق کنید تا با آمادگی بیشتری بتوانید ادامه آموزشها را پیگیری کنید.
اگر هر گونه سوالی در مورد مباحث این جلسه برایتان پیش آمده آن را در بخش نظرات اعلام کنید.
نظرات