اتصال PHP به MySQL — به زبان ساده

۳۱۵۸ بازدید
آخرین به‌روزرسانی: ۰۸ مهر ۱۴۰۲
زمان مطالعه: ۷ دقیقه
اتصال PHP به MySQL — به زبان ساده

در این مقاله با روش اتصال PHP به MySQL و شیوه اجرای عملیات مختلف پایگاه داده آشنا می‌شویم. PHP روش‌های مختلفی برای اتصال به سرور پایگاه داده MySQL دارد. تا نسخه 5.5 این زبان، یکی از محبوب‌ترین روش‌ها برای اتصال به پایگاه داده مای‌اس‌کیو‌ال، استفاده از اکستنشن MySQL بود که یک روش رویه‌ای برای اتصال به سرور MySQL ارائه می‌کرد. با این حال این اکستنشن از نسخه 5.5 به بعد منسوخ شد و دیگر به آن دسترسی نداریم. در حال حاضر دو گزینه وجود دارند که شامل PDO و MySQLi هستند.

اکستنشن PDO که اختصاری برای عبارت «اشیای داده‌ای PHP» یا همان PHP Data Objects است انواع متفاوتی از سرورهای پایگاه داده را همراه با سرور MySQL ارائه می‌کند. از آنجا که این اکستنشن پرتابل است در صورتی که تصمیم بگیرید سرور پایگاه داده را در هر زمان تغییر دهید، می‌توانید به سهولت این کار را اجرا کنید.

از سوی دیگر اکستنشن MySQLi خاص سرور MySQL است و سرعت و عملکرد بهتری ارائه می‌کند. همچنین درک اکستنشن MySQLi در ابتدای کار کمی آسان‌تر است، چون امکان نوشتن مستقیم کوئری‌های MySQL را فراهم می‌سازد. اگر قبلاً با پایگاه‌های داده MySQL کار کرده باشید، این اکستنشن برای شما آشناتر خواهد بود. با این حال اکستنشن PDO نگاشت قدرتمندی از پایگاه داده SQL به کد PHP ایجاد می‌کند و امکان اجرای عملیات پایگاه داده را بدون این که لازم باشد جزییات SQL یا پایگاه داده را بدانید فراهم می‌سازد. در بلندمدت و برای پروژه‌های بزرگ‌تر، PDO می‌تواند منجر به صرفه‌جویی زیادی در حجم کدنویسی و تلاش دیباگ شود. ما در این مقاله از اکستنشن MySQLi استفاده می‌کنیم و موضوعات زیر را مورد بررسی قرار می‌دهیم:

  • ایجاد یک اتصال MySQL
  • درج، به‌روزرسانی و حذف رکوردها
  • بازیابی رکوردها

ایجاد یک اتصال MySQL

در این بخش با شیوه اتصال به سرور MySQL از اسکریپت PHP برای ایجاد شیء اتصال آشنا می‌شویم. سپس این شیء اتصال برای اجرای کوئری‌ها، واکشی خروجی و دستکاری رکوردهای پایگاه داده مورد استفاده قرار می‌گیرد. همچنان که پیشتر اشاره کردیم، قصد داریم از اکستنشن MySQLi استفاده کنیم.

اکستنشن MySQLi دو روش متفاوت برای اجرای عملیات پایگاه داده ارائه کرده است. می‌توانید از آن به روش شیءگرا یا روش رویه‌ای استفاده کنید. در این راهنما با توجه به این که مخاطبان قشر مبتدی هستند از روش رویه‌ای استفاده می‌کنیم.  برای شروع فایلی به نام db_connect.php در ریشه سند با محتوای زیر ایجاد می‌کنیم:

1<?php
2$mysqli_link = mysqli_connect("{HOST_NAME}", "{DATABASE_USERNAME}", "{DATABASE_PASSWORD}", "{DATABASE_NAME}");
3 
4if (mysqli_connect_errno()) 
5{
6    printf("MySQL connection failed with the error: %s", mysqli_connect_error());
7    exit;
8}

توجه کنید که از placeholder-هایی برای تابع mysqli_connect استفاده کردیم و شما باید آن‌ها را با مقادیر واقعی تعویض کنید.

در ادامه هر یک از این بخش‌ها را به تفصیل توضیح می‌دهیم:

  • {HOST_NAME}

این بخش نشان‌دهنده نام میزبان سرور MySQL یا نشانی IP آن است. اگر سرور MySQL را همراه با PHP روی سیستم خود نصب کرده باشید، باید از localhost یا 127.0.0.1 استفاده کنید. از سوی دیگر اگر از سرور MySQL استفاده می‌کنید که به صورت بیرونی میزبانی می‌شود، می‌توانید از نام میزبان با آدرس IP مربوطه استفاده کنید.

  • {DATABASE_USERNAME}

این بخش نشان‌دهنده نام کاربری کاربر MySQL است. این مقدار اساساً آن نام کاربری است که در زمان اتصال به سرور MySQL خود مورد استفاده قرار می‌دهید.

  • {DATABASE_PASSWORD}

این مقدار نیز نماینده رمز عبور کاربر MySQL است. در این مورد نیز رمز عبور برای اتصال به سرور MySQL همراه با نام کاربری فوق مورد استفاده قرار می‌گیرد.

  • {DATABASE_NAME}

این مقدار همان نام پایگاه داده MySQL است که قرار است به آن اتصال یابیم. زمانی که اتصال ایجاد شد، برای عملیات بعدی به پایگاه داده کوئری می‌زنیم.

در ادامه مقادیر placeholders را با مقادیر واقعی تعویض می‌کنیم. در این مورد ما سرور MySQL را به صورت لوکال نصب کرده‌ایم و یک نام کاربری به صورت tutsplus-demo-user و رمز عبور به صورت tutsplus-demo-password داریم. بدین ترتیب مثال فوق به صورت زیر درمی‌آید:

1<?php
2$mysqli_link = mysqli_connect("localhost", "tutsplus-demo-user", "tutsplus-demo-password", "tutsplus-demo-database");
3 
4if (mysqli_connect_errno()) 
5{
6    printf("MySQL connection failed with the error: %s", mysqli_connect_error());
7    exit;
8}

اگر این مثال را اجرا کنید، یک لینک اتصال به پایگاه داده ایجاد کرده و آن را به متغیر ‎$mysqli_link انتساب می‌دهد که در ادامه برای اجرای انواع مختلفی از عملیات پایگاه داده مورد استفاده قرار می‌گیرد.

از سوی دیگر اگر هر گونه مشکلی در راه‌اندازی اتصال وجود داشته باشد، تابع mysqli_connect_errno یک کد خطا بازگشت می‌دهد و تابع mysqli_connect_error یک خطای واقعی را نمایش خواهد داد. در مثال فوق، از آن به جهت مقاصد دیباگ استفاده کرده‌ایم.

اکنون یک اتصال موفق به سرور MySQL داریم و در بخش‌های بعدی شیوه اجرای انواع متفاوتی از کوئری‌ها را مورد بررسی قرار می‌دهیم.

شیوه درج رکورد

در بخش قبلی شیوه استفاده از تابع mysqli_connect برای راه‌اندازی یک اتصال پایگاه داده را با سرور MySQL مورد بررسی قرار دادیم. در این بخش پیش‌تر می‌رویم و شیوه استفاده از شیء اتصال برای اجرای کوئری‌های INSERT را بررسی می‌کنیم.

اگر می‌خواهید مثال‌های طرح شده در این مقاله را خودتان نیز اجرا کنید، باید جدول MySQL زیر را در پایگاه داده‌تان بسازید. این جدول را در همه مثال‌های بعدی نیز مورد استفاده قرار خواهیم داد.

1CREATE TABLE `students` (
2  `id` int(11) NOT NULL AUTO_INCREMENT,
3  `first_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
4  `last_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
5  `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
6  PRIMARY KEY (`id`)
7) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

در ادامه جدول MySQL فوق را با استفاده از نرم‌افزار phpMyAdmin یا ابزار خط فرمان می‌سازیم.

سپس فایل db_insert.php را با محتوای زیر ایجاد می‌کنیم. فراموش نکنید که پارامترهای اتصال را با موارد خودتان عوض کنید:

1<?php
2$mysqli_link = mysqli_connect("localhost", "tutsplus-demo-user", "tutsplus-demo-password", "tutsplus-demo-database");
3 
4if (mysqli_connect_errno())
5{
6    printf("MySQL connection failed with the error: %s", mysqli_connect_error());
7    exit;
8}
9 
10$insert_query = "INSERT INTO students(`first_name`,`last_name`,`email`)
11VALUES ('". mysqli_real_escape_string($mysqli_link, 'John') ."','". mysqli_real_escape_string($mysqli_link, 'Wood') ."','". mysqli_real_escape_string($mysqli_link, 'john.wood@tutsplus.com') ."')";
12  
13// run the insert query
14If (mysqli_query($mysqli_link, $insert_query)) {
15    echo 'Record inserted successfully.';
16}
17  
18// close the db connection
19mysqli_close($mysqli_link);
20?>

ابتدا با استفاده از تابع mysqli_connect چنان که پیشتر اشاره کردیم، یک اتصال پایگاه داده می‌سازیم. سپس کوئری insert را که قرار است در ادامه اجرا شود آماده می‌کنیم. توجه داشته باشید که ما از تابع mysqli_real_escape_string برای escape کردن رشته‌ای که قرار است به عنوان کوئری درج استفاده شود بهره گرفته‌ایم. به طور خاص باید از این تابع در مواردی که با مقادیر تحویل شده از طریق متغیرهای ‎$_POST سروکار داریم استفاده کنید تا از ریسک امنیتی تزریق SQL جلوگیری کنیم.

در نهایت از تابع mysqli_query استفاده می‌کنیم که دو آرگومان می‌گیرد. آرگومان نخست لینک اتصال فعالی است که کوئری را اجرا خواهد کرد. آرگومان دوم هم یک کوئری MySQL است که می‌خواهیم اجرا کنیم. تابع mysqli_query در صورتی true بازگشت می‌دهد که کوئری با موفقیت اجرا شده باشد.

سپس از تابع mysqli_close برای بستن اتصال فعال پایگاه داده استفاده می‌کنیم. رویه مناسب این است که اتصال پایگاه داده را در زمانی که عملیات پایگاه داده پایان یافت ببندیم. در ادامه اسکریپت را اجرا می‌کنیم و رکوردی را در جدول students درج می‌کنیم.

شیوه به‌روزرسانی رکورد

به‌روزرسانی رکوردها در پایگاه داده از طریق اسکریپت PHP مشابه عملیات درج است و تنها تفاوت در این است که کوئری باید به جای کوئری insert به صورت کوئری update باشد. در مثال فوق فیلد first_name را مانند مثال زیر به‌روزرسانی می‌کنیم:

1<?php
2$mysqli_link = mysqli_connect("localhost", "tutsplus-demo-user", "tutsplus-demo-password", "tutsplus-demo-database");
3 
4if (mysqli_connect_errno())
5{
6    printf("MySQL connection failed with the error: %s", mysqli_connect_error());
7    exit;
8}
9 
10$update_query = "UPDATE students SET `first_name` = '". mysqli_real_escape_string($mysqli_link,'Johnny') ."' WHERE `email` = 'john.wood@tutsplus.com'";
11  
12// run the update query
13If (mysqli_query($mysqli_link, $update_query)) {
14    echo 'Record updated successfully.';
15}
16  
17// close the db connection
18mysqli_close($mysqli_link);
19?>

با اجرای این اسکریپت رکورد مربوطه در جدول students به‌روزرسانی می‌شود.

شیوه انتخاب رکوردها

در بخش‌های قبلی با شیوه درج و به‌روزرسانی رکوردها در پایگاه داده با استفاده از اسکریپت PHP آشنا شدیم. در این بخش به بررسی شیوه واکشی رکوردها از پایگاه داده با استفاده از انواع متفاوت تابع‌های MySQLi آشنا می‌شویم.

ابتدا باید از تابع mysqli_query برای اجرای کوئری select استفاده کنیم. به محض اجرای موفق کوئری select تابع mysqli_query شیء حاصل را بازگشت می‌دهد که می‌توانیم روی آن حلقه‌ای تعریف کرده و رکوردهای بازگشتی را بازیابی کنیم، زمانی که نوبت به واکشی و تعریف حلقه تکرار روی رکوردهای شیء حاصل از MySQLi می‌رسد، تابع‌های متفاوتی وجود دارند که می‌توان مورد استفاده قرار داد:

  • mysqli_fetch_all

این تابع امکان واکشی همه نتایج را به صورت یکباره می‌دهد. می‌توان تعیین کرد که نتایج به صورت یک آرایه انجمنی، آرایه عددی و یا هر دو باشند.

  • mysqli_fetch_array

این تابع امکان بازیابی یک ردیف را در هر بار می‌دهد. از این رو باید از حلقه while برای تکرار روی همه رکوردها استفاده کنیم. در این مورد نیز می‌توانیم تعیین کنیم که آیا می‌خواهیم ردیف حاصل به صورت یک آرایه انجمنی یا آرایه عددی و یا هر دو باشد.

  • mysqli_fetch_assoc

این تابع ردیف حاصل را به صورت یک به یک و آرایه انجمنی واکشی می‌کند.

  • mysqli_fetch_object

ردیف حاصل را به صورت یک به یک و شیء واکشی می‌کند.

در ادامه مثالی ارائه شده تا با طرز کار آن آشنا شوید:

1<?php
2$mysqli_link = mysqli_connect("localhost", "tutsplus-demo-user", "tutsplus-demo-password", "tutsplus-demo-database");
3 
4if (mysqli_connect_errno())
5{
6    printf("MySQL connection failed with the error: %s", mysqli_connect_error());
7    exit;
8}
9 
10$select_query = "SELECT * FROM students LIMIT 10";
11$result = mysqli_query($mysqli_link, $select_query);
12 
13while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
14    echo "First Name:" . $row['first_name'] . "<br/>";
15    echo "Last Name:" . $row['last_name'] . "<br/>";
16    echo "Email:" . $row['email'] . "<br/>";
17    echo "<br/>";
18}
19 
20// close the db connection
21mysqli_close($mysqli_link);
22?>

چنان که می‌بینید، از تابع mysqli_fetch_array به همراه گزینه MYSQLI_ASSOC به عنوان آرگومان دوم استفاده کرده‌ایم و از این رو ردیف حاصل را به صورت یک آرایه انجمنی بازگشت می‌دهد. اگر از گزینه MYSQLI_NUM استفاده کنید می‌توانید به شکل row[0], $row[1]$ و row[2]$ در مثال فوق به آن دسترسی یابید.

از سوی دیگر، می‌توانید از تابع mysqli_fetch_object در مثال فوق استفاده کنید و به مقادیر، چنان که در قطعه کد زیر دیده می‌شود دسترسی یابید. برای اختصار، قطعه کد حلقه while ارائه شده است:

123while ($row = mysqli_fetch_object($result)) {
4    echo "First Name:" . $row->first_name . "<br/>";
5    echo "Last Name:" . $row->last_name . "<br/>";
6    echo "Email:" . $row->email . "<br/>";
7    echo "<br/>";
8}
9...
10...

به این ترتیب می‌توانید رکوردها را از پایگاه داده MySQLi واکشی کرده و نمایش دهید.

شیوه حذف رکوردها

در این بخش با شیوه اجرای کوئری‌های حذف از اسکریپت PHP آشنا می‌شویم. حذف کردن رکوردها از یک پایگاه داده عملیاتی کاملاً سرراست است، زیرا باید کوئری delete را آماده و با تابع mysqli_query اجرا کنید.

در ادامه مثالی از طرز کار آن را می‌بینید:

1<?php
2$mysqli_link = mysqli_connect("localhost", "tutsplus-demo-user", "tutsplus-demo-password", "tutsplus-demo-database");
3 
4if (mysqli_connect_errno())
5{
6    printf("MySQL connection failed with the error: %s", mysqli_connect_error());
7    exit;
8}
9 
10$delete_query = "DELETE FROM students WHERE `email` = 'john.wood@tutsplus.com'";
11  
12// run the update query
13If (mysqli_query($mysqli_link, $delete_query)) {
14    echo 'Record deleted successfully.';
15}
16  
17// close the db connection
18mysqli_close($mysqli_link);
19?>

چنان که می‌بینید، همه چیز همانند مثال‌های کوئری‌های درج و به‌روزرسانی است که قبلاً دیدیم به جز این که این بار از کوئری delete استفاده می‌کنیم. بنابراین با شیوه اجزای انواع متفاوت عملیات پایگاه داده از اسکریپت‌های PHP آشنا شدیم. به این طریق به انتهای این راهنما می‌رسیم. امیدواریم مطالبی که در این مقاله مطرح و بررسی شدند به شما کمک کرده باشند که با مفاهیم اتصال پایگاه داده و به خصوص شیوه اتصال PHP به MySQL آشنا شده و روش اجرای انواع مختلف عملیات را آموخته باشید.

سخن پایانی

در این مقاله به بررسی شیوه اتصال PHP به پایگاه‌های داده MySQL با استفاده از اکستنشن MySQLi پرداختیم. در این مسیر از راه‌اندازی اتصال پایگاه داده تا اجرای کوئری های مختلف مورد بررسی قرار گرفت و تقریباً همه جنبه‌های اتصال به پایگاه داده توضیح داده شدند.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۵ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
code.tutsplus
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *