آموزش برنامه نویسی PHP-جلسه بیست و سوم

آموزش برنامه نویسی PHP-جلسه بیست و سوم

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

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

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

Table of contents [Show] [Hide]

۱. آشنایی با PHP و MySQL

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

PHP چیست؟

PHP یک زبان برنامه‌نویسی سمت سرور است که برای طراحی و توسعه وب‌سایت‌ها و برنامه‌های تحت وب استفاده می‌شود. کدهای PHP روی سرور اجرا می‌شوند و نتیجه اجرای آن‌ها معمولاً به‌صورت HTML به مرورگر کاربر ارسال می‌شود.

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

MySQL چیست؟

MySQL یک سیستم مدیریت پایگاه داده رابطه‌ای (RDBMS) است که برای ذخیره، سازمان‌دهی و مدیریت اطلاعات استفاده می‌شود. اطلاعات در MySQL معمولاً داخل جدول‌هایی شامل سطرها و ستون‌ها نگهداری می‌شوند.

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

چرا از PHP و MySQL در کنار یکدیگر استفاده می‌کنیم؟

PHP وظیفه دریافت و پردازش درخواست‌های کاربران را بر عهده دارد و MySQL اطلاعات را به‌صورت ساختاریافته ذخیره می‌کند. این دو فناوری در کنار یکدیگر امکان ساخت برنامه‌های تحت وب پویا و کاربردی را فراهم می‌کنند.

  • ذخیره اطلاعات کاربران و اعضای وب‌سایت.
  • مدیریت محصولات و دسته‌بندی‌ها در فروشگاه اینترنتی.
  • ذخیره مقالات و مطالب وب‌سایت.
  • مدیریت سفارش‌ها و اطلاعات پرداخت.
  • ایجاد پنل مدیریت و سیستم‌های گزارش‌گیری.

۲. آماده‌سازی محیط برنامه‌نویسی PHP و MySQL

برای اجرای مثال‌های این آموزش به یک محیط توسعه محلی نیاز داریم. یکی از ابزارهای مناسب برای شروع، نرم‌افزار XAMPP است.

XAMPP مجموعه‌ای از ابزارهای موردنیاز برای اجرای پروژه‌های PHP را در اختیار شما قرار می‌دهد. این نرم‌افزار معمولاً شامل Apache، PHP، MariaDB و ابزار phpMyAdmin است.

برای شروع مراحل زیر را انجام دهید:

  1. نرم‌افزار XAMPP را روی سیستم خود نصب کنید.
  2. کنترل پنل XAMPP را اجرا نمایید.
  3. سرویس Apache را فعال کنید.
  4. سرویس MySQL را فعال کنید.
  5. مرورگر خود را باز کرده و آدرس localhost را وارد کنید.
  6. برای ورود به phpMyAdmin آدرس localhost/phpmyadmin را باز کنید.

با ورود به phpMyAdmin می‌توانید دیتابیس‌ها و جدول‌های موجود را مشاهده و مدیریت کنید. همچنین امکان اجرای مستقیم دستورات SQL از طریق بخش SQL این ابزار وجود دارد.

نکته: در نسخه‌های جدید XAMPP معمولاً از MariaDB به‌عنوان جایگزین سازگار با MySQL استفاده می‌شود. دستورات این آموزش برای کارهای معمول SQL با هر دو سیستم قابل استفاده هستند.

۳. اتصال PHP به MySQL (MySQL Connect)

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

روش اول: اتصال به MySQL با استفاده از MySQLi

MySQLi مخفف MySQL Improved است و یک رابط برنامه‌نویسی برای ارتباط PHP با پایگاه داده MySQL محسوب می‌شود. این رابط از دو روش برنامه‌نویسی شی‌گرا و رویه‌ای پشتیبانی می‌کند.

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


<?php

$host = "localhost";
$username = "root";
$password = "";
$database = "php_tutorial";

$conn = new mysqli(
    $host,
    $username,
    $password,
    $database
);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$conn->set_charset("utf8mb4");

echo "اتصال به دیتابیس با موفقیت انجام شد.";

?>
        

در این کد، ابتدا اطلاعات موردنیاز برای اتصال تعریف شده‌اند. سپس با استفاده از کلاس mysqli ارتباط با پایگاه داده برقرار می‌شود.

متغیرهای استفاده‌شده در کد عبارت‌اند از:

  • $host: آدرس سرور دیتابیس که در محیط محلی معمولاً localhost است.
  • $username: نام کاربری دیتابیس.
  • $password: رمز عبور کاربر دیتابیس.
  • $database: نام پایگاه داده‌ای که قصد اتصال به آن را داریم.
  • $conn: شیء ارتباطی برای اجرای دستورات SQL.

ویژگی connect_error برای بررسی خطاهای اتصال استفاده می‌شود. اگر ارتباط با دیتابیس برقرار نشود، برنامه متوقف شده و پیام خطا نمایش داده خواهد شد.

همچنین دستور set_charset("utf8mb4") باعث می‌شود ارتباط با دیتابیس از مجموعه کاراکترهای UTF-8 پشتیبانی کند. این موضوع برای ذخیره و نمایش صحیح حروف فارسی اهمیت زیادی دارد.

روش دوم: اتصال به MySQL با استفاده از PDO

PDO مخفف PHP Data Objects است و یک رابط استاندارد برای ارتباط PHP با انواع پایگاه داده محسوب می‌شود. یکی از مزیت‌های مهم PDO این است که علاوه بر MySQL از سیستم‌های پایگاه داده دیگری نیز پشتیبانی می‌کند.

برای اتصال به دیتابیس با استفاده از PDO از کد زیر استفاده می‌کنیم:


<?php

$host = "localhost";
$dbname = "php_tutorial";
$username = "root";
$password = "";

try {

    $pdo = new PDO(
        "mysql:host=$host;dbname=$dbname;charset=utf8mb4",
        $username,
        $password
    );

    $pdo->setAttribute(
        PDO::ATTR_ERRMODE,
        PDO::ERRMODE_EXCEPTION
    );

    echo "اتصال به دیتابیس با موفقیت انجام شد.";

} catch (PDOException $e) {

    error_log($e->getMessage());

    die("خطا در اتصال به پایگاه داده.");

}

?>
        

در این مثال از ساختار try و catch استفاده کرده‌ایم. دستورات داخل try اجرا می‌شوند و اگر مشکلی در اتصال یا اجرای عملیات رخ دهد، خطا توسط catch دریافت خواهد شد.

ویژگی PDO::ATTR_ERRMODE مشخص می‌کند که خطاهای PDO چگونه مدیریت شوند. با انتخاب PDO::ERRMODE_EXCEPTION، خطاها به شکل استثنا ایجاد می‌شوند و می‌توان آن‌ها را مدیریت کرد.

تفاوت MySQLi و PDO چیست؟

ویژگیMySQLiPDO
پشتیبانی از MySQLبلهبله
پشتیبانی از دیتابیس‌های مختلفخیربله
پشتیبانی از Prepared Statementبلهبله
برنامه‌نویسی شی‌گرابلهبله
مناسب برای پروژه‌های PHPبلهبله

هر دو روش برای توسعه پروژه‌های PHP مناسب هستند. در این آموزش برای یکپارچگی مثال‌ها بیشتر از PDO استفاده می‌کنیم.

۴. ایجاد پایگاه داده در MySQL (MySQL Create Database)

پس از برقراری ارتباط با MySQL، باید یک پایگاه داده ایجاد کنیم تا اطلاعات پروژه در آن ذخیره شوند.

پایگاه داده یا Database محلی برای سازمان‌دهی اطلاعات است. برای مثال، اگر بخواهیم یک سیستم مدیریت کاربران طراحی کنیم، می‌توانیم پایگاه داده‌ای با نام php_tutorial ایجاد کنیم و اطلاعات کاربران را داخل جدول‌های آن نگهداری نماییم.

ایجاد دیتابیس با استفاده از دستور SQL

برای ساخت پایگاه داده از دستور CREATE DATABASE استفاده می‌کنیم:


CREATE DATABASE php_tutorial;
        

با اجرای این دستور، دیتابیسی با نام php_tutorial ایجاد خواهد شد.

ایجاد دیتابیس با تعیین نوع کاراکترها

بهتر است هنگام ساخت دیتابیس، مجموعه کاراکتر و شیوه مقایسه متون را نیز مشخص کنیم. برای پروژه‌هایی که با زبان فارسی کار می‌کنند، استفاده از utf8mb4 انتخاب مناسبی است.


CREATE DATABASE php_tutorial
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
        

در این دستور:

  • CREATE DATABASE برای ایجاد پایگاه داده استفاده می‌شود.
  • CHARACTER SET نوع رمزگذاری کاراکترها را مشخص می‌کند.
  • COLLATE قوانین مقایسه و مرتب‌سازی متن‌ها را تعیین می‌کند.

بررسی وجود دیتابیس قبل از ایجاد آن

اگر بخواهیم از ایجاد مجدد دیتابیسی که از قبل وجود دارد جلوگیری کنیم، می‌توانیم از عبارت IF NOT EXISTS استفاده کنیم:


CREATE DATABASE IF NOT EXISTS php_tutorial
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
        

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

ایجاد دیتابیس از طریق phpMyAdmin

علاوه بر اجرای دستورات SQL، می‌توانیم از محیط گرافیکی phpMyAdmin نیز برای ساخت دیتابیس استفاده کنیم.

  1. وارد آدرس localhost/phpmyadmin شوید.
  2. از منوی سمت چپ گزینه New را انتخاب کنید.
  3. در قسمت Database name نام php_tutorial را وارد نمایید.
  4. از قسمت Collation گزینه مناسب مانند utf8mb4_unicode_ci را انتخاب کنید.
  5. روی دکمه Create کلیک کنید.

اکنون پایگاه داده ساخته شده و آماده ایجاد جدول است.

۵. ایجاد جدول در MySQL (MySQL Create Table)

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

فرض کنید می‌خواهیم یک سیستم مدیریت کاربران ایجاد کنیم. برای این کار به جدولی با نام users نیاز داریم که اطلاعاتی مانند شناسه، نام، ایمیل، رمز عبور و تاریخ ثبت‌نام کاربران را ذخیره کند.

ساخت جدول با دستور CREATE TABLE

دستور زیر یک جدول ساده برای ذخیره اطلاعات کاربران ایجاد می‌کند:


CREATE TABLE users (

    id INT AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(100) NOT NULL,

    email VARCHAR(150) NOT NULL,

    password VARCHAR(255) NOT NULL,

    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);
        

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

بررسی فیلدهای جدول users

  • id: شناسه اختصاصی هر کاربر است. از نوع INT بوده و با استفاده از AUTO_INCREMENT به‌صورت خودکار افزایش پیدا می‌کند.
  • name: برای ذخیره نام کاربر استفاده می‌شود و از نوع VARCHAR با حداکثر طول ۱۰۰ کاراکتر است.
  • email: آدرس ایمیل کاربر را ذخیره می‌کند.
  • password: برای نگهداری هش رمز عبور کاربر استفاده می‌شود. رمز عبور نباید به‌صورت متن ساده ذخیره شود.
  • created_at: زمان ثبت اطلاعات را به‌صورت خودکار ذخیره می‌کند.

آشنایی با انواع داده در MySQL

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

نوع دادهکاربردمثال
INTذخیره اعداد صحیح25
BIGINTذخیره اعداد صحیح بزرگ9876543210
VARCHARذخیره متن با طول متغیرنام کاربر
TEXTذخیره متن‌های طولانیتوضیحات مقاله
DATEذخیره تاریخ2026-11-08
DATETIMEذخیره تاریخ و ساعت2026-11-08 10:30:00
DECIMALذخیره اعداد اعشاری دقیق1250.50
BOOLEANذخیره مقادیر درست و نادرستTRUE / FALSE

آشنایی با محدودیت‌های مهم در جدول‌ها

در MySQL می‌توان از محدودیت‌هایی استفاده کرد که صحت و یکپارچگی اطلاعات را تضمین می‌کنند.

  • PRIMARY KEY: مشخص کردن کلید اصلی جدول برای شناسایی منحصربه‌فرد هر رکورد.
  • AUTO_INCREMENT: افزایش خودکار مقدار عددی یک ستون.
  • NOT NULL: جلوگیری از ثبت مقدار NULL در یک ستون.
  • UNIQUE: جلوگیری از ثبت مقدار تکراری در یک ستون یا مجموعه‌ای از ستون‌ها.
  • DEFAULT: تعیین مقدار پیش‌فرض برای ستون.
  • FOREIGN KEY: ایجاد ارتباط بین جدول‌های مرتبط.

ایجاد جدول با محدودیت UNIQUE

برای جلوگیری از ثبت ایمیل تکراری، بهتر است ستون email را به‌صورت UNIQUE تعریف کنیم:


CREATE TABLE users (

    id INT AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(100) NOT NULL,

    email VARCHAR(150) NOT NULL UNIQUE,

    password VARCHAR(255) NOT NULL,

    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);
        

با این کار دیتابیس اجازه نمی‌دهد دو کاربر با یک آدرس ایمیل یکسان ثبت شوند.

مشاهده ساختار جدول

برای مشاهده ستون‌ها و ساختار یک جدول می‌توانیم از دستور DESCRIBE استفاده کنیم:


DESCRIBE users;
        

این دستور نام ستون‌ها، نوع داده، امکان NULL بودن و سایر ویژگی‌های آن‌ها را نمایش می‌دهد.

۶. ایجاد جدول از طریق PHP

تا این قسمت یاد گرفتیم چگونه با اجرای دستورات SQL جدول بسازیم. اما گاهی لازم است ایجاد جدول از داخل برنامه PHP انجام شود.

برای این کار می‌توانیم از اتصال PDO استفاده کرده و دستور CREATE TABLE را اجرا کنیم.


<?php

require_once "db.php";

$sql = "
CREATE TABLE IF NOT EXISTS users (

    id INT AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(100) NOT NULL,

    email VARCHAR(150) NOT NULL UNIQUE,

    password VARCHAR(255) NOT NULL,

    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_unicode_ci
";

try {

    $pdo->exec($sql);

    echo "جدول کاربران با موفقیت ایجاد شد.";

} catch (PDOException $e) {

    error_log($e->getMessage());

    echo "خطا در ایجاد جدول.";

}

?>
        

در این مثال ابتدا فایل اتصال به دیتابیس را با require_once فراخوانی می‌کنیم. سپس دستور SQL را داخل متغیر sql قرار داده و با استفاده از متد exec اجرا می‌کنیم.

عبارت IF NOT EXISTS باعث می‌شود در صورت وجود داشتن جدول، دستور ایجاد مجدد آن اجرا نشود.

همچنین ENGINE=InnoDB موتور ذخیره‌سازی جدول را مشخص می‌کند. این موتور از تراکنش‌ها و کلیدهای خارجی پشتیبانی می‌کند.

۷. ثبت اطلاعات در MySQL (MySQL Insert Data)

پس از ایجاد دیتابیس و جدول، نوبت به ذخیره اطلاعات می‌رسد. برای اضافه کردن یک رکورد جدید به جدول از دستور INSERT INTO استفاده می‌کنیم.

برای مثال، می‌خواهیم اطلاعات یک کاربر جدید شامل نام، ایمیل و رمز عبور را در جدول users ذخیره کنیم.

ثبت اطلاعات با دستور INSERT در SQL

ساختار کلی دستور INSERT به شکل زیر است:


INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
        

یک نمونه عملی برای جدول کاربران:


INSERT INTO users (name, email, password)
VALUES (
    'Ali Ahmadi',
    'ali@example.com',
    'hashed_password'
);
        

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

همچنین مقدار created_at به دلیل داشتن DEFAULT CURRENT_TIMESTAMP به‌صورت خودکار ثبت می‌شود.

ثبت چند رکورد به‌صورت هم‌زمان

MySQL امکان ثبت چند رکورد با یک دستور INSERT را نیز فراهم می‌کند:


INSERT INTO users (name, email, password)
VALUES
    ('Ali Ahmadi', 'ali@example.com', 'hash_1'),
    ('Sara Mohammadi', 'sara@example.com', 'hash_2'),
    ('Reza Karimi', 'reza@example.com', 'hash_3');
        

در این روش چند کاربر با یک دستور به جدول اضافه می‌شوند. در پروژه‌های بزرگ، این روش می‌تواند تعداد درخواست‌های ارسالی به دیتابیس را کاهش دهد.

ثبت اطلاعات با استفاده از PHP و PDO

حالا می‌خواهیم اطلاعاتی را که از طریق PHP دریافت می‌کنیم، در دیتابیس ذخیره کنیم.

ابتدا فایلی با نام db.php ایجاد کنید و کد اتصال به دیتابیس را داخل آن قرار دهید:


<?php

$host = "localhost";
$dbname = "php_tutorial";
$username = "root";
$password = "";

try {

    $pdo = new PDO(
        "mysql:host=$host;dbname=$dbname;charset=utf8mb4",
        $username,
        $password,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES => false
        ]
    );

} catch (PDOException $e) {

    error_log($e->getMessage());

    exit("خطا در اتصال به دیتابیس.");

}

?>
        

با این کار می‌توانیم در فایل‌های دیگر پروژه، بدون تکرار کدهای اتصال، از طریق فراخوانی db.php به دیتابیس دسترسی داشته باشیم.

طراحی فرم ثبت اطلاعات کاربر

ابتدا یک فایل با نام register.php ایجاد کرده و فرم زیر را داخل آن قرار دهید:


<!DOCTYPE html>
<html lang="fa" dir="rtl">

<head>
    <meta charset=UTF-8>
    <title>ثبت نام کاربر</title>
</head>

<body>

    <h2>فرم ثبت نام کاربران</h2>

    <form action="insert.php" method="POST">

        <label>نام و نام خانوادگی:</label>

        <input
            type=text
            name=name
            required
        >

        <br><br>

        <label>ایمیل:</label>

        <input
            type=email
            name=email
            required
        >

        <br><br>

        <label>رمز عبور:</label>

        <input
            type=password
            name=password
            minlength="8"
            required
        >

        <br><br>

        <button type=submit>
            ثبت اطلاعات
        </button>

    </form>

</body>
</html>
        

در این فرم سه فیلد برای دریافت نام، ایمیل و رمز عبور ایجاد کرده‌ایم. اطلاعات فرم با متد POST به فایل insert.php ارسال می‌شوند.

ذخیره اطلاعات فرم در دیتابیس

اکنون باید فایل insert.php را ایجاد کنیم. این فایل اطلاعات ارسال‌شده را دریافت، اعتبارسنجی و در جدول users ذخیره می‌کند.


<?php

require_once "db.php";

if ($_SERVER["REQUEST_METHOD"] !== "POST") {
    http_response_code(405);
    exit("روش درخواست مجاز نیست.");
}

$name = trim($_POST["name"] ?? "");

$email = trim($_POST["email"] ?? "");

$password = $_POST["password"] ?? "";

if ($name === "") {
    exit("وارد کردن نام الزامی است.");
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    exit("آدرس ایمیل معتبر نیست.");
}

if (strlen($password) < 8) {
    exit("رمز عبور باید حداقل ۸ کاراکتر باشد.");
}

$passwordHash = password_hash(
    $password,
    PASSWORD_DEFAULT
);

$sql = "
    INSERT INTO users (name, email, password)
    VALUES (:name, :email, :password)
";

try {

    $stmt = $pdo->prepare($sql);

    $stmt->execute([
        ":name" => $name,
        ":email" => $email,
        ":password" => $passwordHash
    ]);

    echo "اطلاعات کاربر با موفقیت ثبت شد.";

} catch (PDOException $e) {

    error_log($e->getMessage());

    if ($e->getCode() === "23000") {
        echo "این ایمیل قبلاً ثبت شده است.";
    } else {
        echo "خطا در ثبت اطلاعات.";
    }

}

?>
        

در این مثال، ابتدا اطلاعات از طریق متد POST دریافت می‌شوند. سپس نام، ایمیل و رمز عبور اعتبارسنجی شده و در صورت صحیح بودن، اطلاعات برای ذخیره‌سازی آماده می‌شوند.

یکی از نکات بسیار مهم در این کد، استفاده از تابع password_hash است. این تابع رمز عبور را به شکل هش‌شده ذخیره می‌کند تا رمز عبور اصلی کاربران به‌صورت مستقیم در دیتابیس نگهداری نشود.

همچنین از Prepared Statement برای اجرای دستور INSERT استفاده کرده‌ایم. این روش از ترکیب مستقیم ورودی کاربر با متن دستور SQL جلوگیری می‌کند و امنیت برنامه را در برابر SQL Injection افزایش می‌دهد.

۸. ثبت اطلاعات با استفاده از MySQLi

علاوه بر PDO می‌توانیم با استفاده از MySQLi نیز اطلاعات را در دیتابیس ثبت کنیم. برای این کار ابتدا باید ارتباط برقرار شده باشد.

مثال زیر نحوه ثبت اطلاعات با Prepared Statement در MySQLi را نشان می‌دهد:


<?php

$conn = new mysqli(
    "localhost",
    "root",
    "",
    "php_tutorial"
);

if ($conn->connect_error) {
    die("خطا در اتصال به دیتابیس.");
}

$conn->set_charset("utf8mb4");

$name = "Ali Ahmadi";

$email = "ali@example.com";

$passwordHash = password_hash(
    "12345678",
    PASSWORD_DEFAULT
);

$sql = "
    INSERT INTO users (name, email, password)
    VALUES (?, ?, ?)
";

$stmt = $conn->prepare($sql);

if (!$stmt) {
    die("خطا در آماده‌سازی دستور.");
}

$stmt->bind_param(
    "sss",
    $name,
    $email,
    $passwordHash
);

if ($stmt->execute()) {

    echo "اطلاعات با موفقیت ثبت شد.";

} else {

    echo "خطا در ثبت اطلاعات.";

}

$stmt->close();

$conn->close();

?>
        

در این مثال از متد prepare برای آماده‌سازی دستور SQL استفاده شده است. علامت سؤال‌ها محل قرارگیری مقادیر ورودی را مشخص می‌کنند.

متد bind_param مقادیر را به پارامترهای دستور متصل می‌کند. حرف s نشان‌دهنده نوع داده رشته‌ای است. در این مثال هر سه مقدار از نوع رشته هستند.

در نهایت متد execute دستور SQL را اجرا می‌کند و در صورت موفقیت، اطلاعات در دیتابیس ذخیره خواهند شد.

۹. مشاهده اطلاعات ثبت‌شده در دیتابیس

پس از ثبت اطلاعات، ممکن است بخواهیم مطمئن شویم که اطلاعات با موفقیت در دیتابیس ذخیره شده‌اند. برای این کار می‌توانیم از دستور SELECT استفاده کنیم.

دستور زیر تمام اطلاعات کاربران را از جدول users دریافت می‌کند:


SELECT * FROM users;
        

اگر فقط به نام و ایمیل کاربران نیاز داشته باشیم، بهتر است ستون‌های موردنیاز را مشخص کنیم:


SELECT name, email
FROM users;
        

همچنین برای مشاهده اطلاعات از طریق PHP و PDO می‌توانیم از کد زیر استفاده کنیم:


<?php

require_once "db.php";

$sql = "SELECT id, name, email, created_at FROM users";

$stmt = $pdo->query($sql);

$users = $stmt->fetchAll();

foreach ($users as $user) {

    echo "شناسه: " . (int) $user["id"] . "<br>";

    echo "نام: " . htmlspecialchars(
        $user["name"],
        ENT_QUOTES,
        "UTF-8"
    ) . "<br>";

    echo "ایمیل: " . htmlspecialchars(
        $user["email"],
        ENT_QUOTES,
        "UTF-8"
    ) . "<br>";

    echo "--------------------<br>";

}

?>
        

در این مثال اطلاعات با استفاده از fetchAll دریافت شده و سپس حلقه foreach آن‌ها را به‌صورت جداگانه نمایش می‌دهد.

استفاده از htmlspecialchars هنگام نمایش اطلاعات متنی کاربران اهمیت زیادی دارد؛ زیرا از اجرای ناخواسته کدهای HTML و JavaScript مخرب جلوگیری می‌کند.

۱۰. بررسی شناسه آخرین رکورد ثبت‌شده

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

در PDO می‌توانیم از متد lastInsertId استفاده کنیم:


<?php

require_once "db.php";

$sql = "
    INSERT INTO users (name, email, password)
    VALUES (:name, :email, :password)
";

$stmt = $pdo->prepare($sql);

$stmt->execute([
    ":name" => "Sara Ahmadi",
    ":email" => "sara@example.com",
    ":password" => password_hash(
        "12345678",
        PASSWORD_DEFAULT
    )
]);

$userId = $pdo->lastInsertId();

echo "شناسه کاربر ثبت‌شده: " . $userId;

?>
        

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

۱۱. آشنایی با خطاهای رایج هنگام کار با MySQL

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

خطا در اتصال به دیتابیس

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

خطای Unknown Database

این خطا زمانی رخ می‌دهد که پایگاه داده موردنظر وجود نداشته باشد یا نام آن را اشتباه وارد کرده باشید. نام دیتابیس را در phpMyAdmin بررسی کنید.

خطای Table Already Exists

اگر جدولی با نام موردنظر از قبل وجود داشته باشد، اجرای مجدد دستور CREATE TABLE ممکن است باعث بروز خطا شود. برای جلوگیری از این مشکل می‌توان از IF NOT EXISTS استفاده کرد.

خطای Duplicate Entry

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

خطای Data Too Long

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

خطای Character Set

اگر تنظیمات کاراکتر در دیتابیس و اتصال PHP هماهنگ نباشند، ممکن است حروف فارسی به‌درستی ذخیره یا نمایش داده نشوند. استفاده از utf8mb4 در دیتابیس، جدول و اتصال PHP می‌تواند از بسیاری از این مشکلات جلوگیری کند.

۱۲. نکات امنیتی مهم در اتصال PHP به MySQL

امنیت دیتابیس یکی از مهم‌ترین موضوعات در طراحی وب‌سایت‌های حرفه‌ای است. اطلاعات کاربران و داده‌های حساس باید به‌گونه‌ای ذخیره و مدیریت شوند که امکان دسترسی غیرمجاز به آن‌ها کاهش پیدا کند.

استفاده از Prepared Statement

هنگام دریافت اطلاعات از کاربر و اجرای دستورات SQL، از Prepared Statement استفاده کنید. این روش از ترکیب مستقیم داده‌های ورودی با دستور SQL جلوگیری می‌کند و احتمال حملات SQL Injection را کاهش می‌دهد.

ذخیره رمز عبور به‌صورت هش‌شده

هرگز رمز عبور کاربران را به‌صورت متن ساده در دیتابیس ذخیره نکنید. در PHP از password_hash برای ایجاد هش رمز عبور استفاده کنید و هنگام ورود کاربران، رمز واردشده را با password_verify بررسی نمایید.

محدود کردن دسترسی کاربر دیتابیس

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

محافظت از اطلاعات اتصال

نام کاربری و رمز عبور دیتابیس را در فایل‌هایی که مستقیماً از طریق مرورگر قابل دسترسی هستند قرار ندهید. بهتر است اطلاعات محرمانه در متغیرهای محیطی یا فایل تنظیماتی خارج از مسیر عمومی وب‌سایت نگهداری شوند.

استفاده از HTTPS

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

اعتبارسنجی اطلاعات ورودی

تمام اطلاعات دریافتی از فرم‌ها باید سمت سرور اعتبارسنجی شوند. اعتبارسنجی HTML به‌تنهایی کافی نیست؛ زیرا کاربران می‌توانند درخواست‌های HTTP را بدون استفاده از فرم مرورگر ارسال کنند.

۱۳. ساختار پیشنهادی فایل‌های پروژه

برای مدیریت بهتر کدها، پیشنهاد می‌شود فایل‌های مربوط به اتصال، فرم و پردازش اطلاعات را از یکدیگر جدا کنید.


php-mysql-project/
│
├── db.php
│
├── create_database.php
│
├── create_table.php
│
├── register.php
│
├── insert.php
│
├── index.php
│
└── config/
    └── database.php
        

وظیفه هر فایل به شکل زیر است:

  • db.php: برقراری ارتباط PHP با MySQL.
  • create_database.php: ایجاد پایگاه داده در صورت نیاز.
  • create_table.php: ساخت جدول‌های موردنیاز پروژه.
  • register.php: نمایش فرم ثبت اطلاعات کاربر.
  • insert.php: دریافت، اعتبارسنجی و ذخیره اطلاعات.
  • index.php: نمایش اطلاعات ذخیره‌شده.
  • database.php: نگهداری تنظیمات اتصال به دیتابیس.

در پروژه‌های حرفه‌ای بهتر است از معماری‌هایی مانند MVC و ابزارهایی مانند Composer برای سازمان‌دهی بهتر کدها استفاده شود.

۱۴. تمرین عملی: ساخت سیستم ثبت کاربران با PHP و MySQL

برای اینکه مطالب این قسمت را بهتر یاد بگیرید، پیشنهاد می‌کنیم یک پروژه کوچک مدیریت کاربران ایجاد کنید.

در این تمرین باید تمام مراحلی را که یاد گرفتیم به‌صورت عملی اجرا کنید:

  1. نصب و راه‌اندازی XAMPP.
  2. فعال کردن سرویس‌های Apache و MySQL.
  3. ایجاد دیتابیسی با نام php_tutorial.
  4. اتصال PHP به دیتابیس با استفاده از PDO.
  5. ساخت جدول users با فیلدهای مناسب.
  6. طراحی فرم ثبت‌نام کاربران با HTML.
  7. دریافت اطلاعات فرم با متد POST.
  8. اعتبارسنجی نام، ایمیل و رمز عبور.
  9. هش کردن رمز عبور با password_hash.
  10. ثبت اطلاعات در جدول با دستور INSERT.
  11. نمایش اطلاعات ذخیره‌شده با دستور SELECT.

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

۱۵. جمع‌بندی آموزش PHP قسمت ۲۳

در این قسمت از مجموعه آموزش PHP با چهار موضوع اساسی در زمینه کار با پایگاه داده MySQL آشنا شدیم. ابتدا یاد گرفتیم چگونه با استفاده از MySQLi و PDO از طریق PHP به دیتابیس متصل شویم. سپس روش ایجاد پایگاه داده با دستور CREATE DATABASE را بررسی کردیم.

در ادامه با دستور CREATE TABLE و انواع داده‌ها و محدودیت‌های مهم در MySQL آشنا شدیم و یک جدول برای ذخیره اطلاعات کاربران ایجاد کردیم. در بخش بعدی نیز نحوه ثبت اطلاعات با دستور INSERT INTO و ارسال اطلاعات فرم‌های HTML به دیتابیس را به‌صورت عملی پیاده‌سازی کردیم.

همچنین با موضوعات مهمی مانند Prepared Statement، اعتبارسنجی اطلاعات، هش کردن رمز عبور، مدیریت خطاها و نکات امنیتی هنگام ارتباط PHP با MySQL آشنا شدیم.

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

۱۶. سؤالات متداول درباره PHP و MySQL

۱. برای اتصال PHP به MySQL از چه روشی استفاده کنیم؟

دو روش پرکاربرد برای اتصال PHP به MySQL وجود دارد: MySQLi و PDO. هر دو از Prepared Statement پشتیبانی می‌کنند. PDO برای پروژه‌هایی که احتمال تغییر نوع پایگاه داده در آن‌ها وجود دارد، گزینه انعطاف‌پذیری محسوب می‌شود.

۲. دستور ایجاد دیتابیس در MySQL چیست؟

برای ایجاد پایگاه داده از دستور CREATE DATABASE استفاده می‌کنیم. برای مثال:


CREATE DATABASE php_tutorial;
        

۳. برای ساخت جدول در MySQL از چه دستوری استفاده می‌شود؟

دستور CREATE TABLE برای ایجاد جدول جدید در دیتابیس استفاده می‌شود. در این دستور می‌توان نام ستون‌ها، نوع داده و محدودیت‌های هر ستون را مشخص کرد.

۴. دستور INSERT INTO چه کاربردی دارد؟

از دستور INSERT INTO برای اضافه کردن رکوردهای جدید به جدول استفاده می‌شود. این دستور یکی از اصلی‌ترین دستورات SQL برای ذخیره اطلاعات است.

۵. تفاوت MySQL و phpMyAdmin چیست؟

MySQL یک سیستم مدیریت پایگاه داده است که اطلاعات را ذخیره و مدیریت می‌کند؛ اما phpMyAdmin یک ابزار تحت وب برای مدیریت پایگاه داده‌های MySQL و MariaDB از طریق محیط گرافیکی است.

۶. آیا می‌توان دیتابیس را مستقیماً از طریق PHP ایجاد کرد؟

بله. با برقراری اتصال به سرور MySQL و داشتن مجوز مناسب، می‌توان دستور CREATE DATABASE را از طریق PDO یا MySQLi اجرا کرد.

۷. چرا باید از utf8mb4 استفاده کنیم؟

utf8mb4 امکان ذخیره طیف گسترده‌ای از کاراکترهای Unicode را فراهم می‌کند و برای نگهداری صحیح حروف فارسی و بسیاری از کاراکترهای دیگر انتخاب مناسبی است.

۸. آیا ذخیره رمز عبور به‌صورت متن ساده در دیتابیس درست است؟

خیر. رمز عبور کاربران باید با استفاده از password_hash به‌صورت هش‌شده ذخیره شود و برای بررسی آن هنگام ورود از password_verify استفاده کنیم.

۹. چگونه از حمله SQL Injection جلوگیری کنیم؟

مهم‌ترین اقدام، استفاده از Prepared Statement و ارسال مقادیر ورودی به‌صورت پارامترهای جداگانه است. همچنین باید ورودی‌ها اعتبارسنجی شوند و سطح دسترسی کاربران دیتابیس محدود باشد.

۱۰. آیا MySQL برای طراحی فروشگاه اینترنتی مناسب است؟

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

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

پیشنهاد ویژه ما:آموزش رایگان PHP

اشتراک گذاری :
ملیکا اسمعیلی
نویسنده

ملیکا اسمعیلی

من یک توسعه‌دهنده وردپرس و متخصص سئو هستم که به کسب‌وکارها کمک می‌کنم وب‌سایت‌های خود را به پلتفرم‌هایی بهینه برای موتورهای جستجو و با نرخ تبدیل بالا تبدیل کنند. با تجربه عملی در Python، HTML و CSS، مهارت‌های فنی توسعه وب را با درک عمیق از سئوی داخلی (On-Page SEO) و سئوی محتوا ترکیب می‌کنم؛

TEST_VALUE_123
https://t.me/artarasaneh
tel:09193426251
https://wa.me/+989193426251
https://instagram.com/artarasaneh_com