RAJESTARY DIGITAL TECH • SECURITY • EDUCATION
دانش • فناوری • امنیت

دنیای تکنولوژی
از یادگیری شروع می‌شود

آموزش‌های کاربردی، برنامه‌نویسی، امنیت و فناوری برای ساختن، یادگرفتن و بهتر زندگی کردن با تکنولوژی.

LEARN BUILD SECURE CREATE

ارتباط با دیتابیس (PDO)؛ دروازه ورود به داده‌های پویا

ارتباط با دیتابیس (PDO)؛ دروازه ورود به داده‌های پویا

🚀 درس اول: ارتباط با دیتابیس (PDO)؛ دروازه ورود به داده‌های پویا

👋

سلام مهمان عزیز!

برای دسترسی به تمام محتوا و امکانات، وارد شوید.

🎯 هدف این درس: یادگیری روش استاندارد و امن اتصال به دیتابیس MySQL با استفاده از PDO، اجرای کوئری‌های SELECT و INSERT، و جلوگیری از حملات SQL Injection.

مهمان عزیز! 👋
تا اینجا یاد گرفتی چطور داده‌ها را در متغیرها و آرایه‌ها ذخیره کنی. اما مشکل اینجاست که وقتی سرور ریستارت شود یا کاربر صفحه را رفرش کند، تمام آن داده‌ها از بین می‌روند.

برای ساخت یک سایت واقعی، ما نیاز به «حافظه دائمی» داریم. اینجاست که دیتابیس (Database) وارد میدان می‌شود. در این درس، تو یاد می‌گیری چطور PHP را به دیتابیس متصل کنی و اطلاعات را برای همیشه ذخیره نمایی.

💡 چرا PDO؟

در گذشته از mysql_connect استفاده می‌شد که منسوخ شده است. امروزه PDO (PHP Data Objects) استاندارد جهانی است چون هم امن‌تر است، هم از دیتابیس‌های مختلف پشتیبانی می‌کند و هم از Prepared Statements برای امنیت بالا استفاده می‌کند.


🗄️ پیش‌نیاز: ساخت دیتابیس در phpMyAdmin

قبل از کدنویسی، باید یک دیتابیس خالی داشته باشیم.

  1. XAMPP Control Panel را باز کن و Apache و MySQL را Start کن.
  2. در مرورگر به آدرس http://localhost/phpmyadmin برو.
  3. روی تب New کلیک کن.
  4. نام دیتابیس را rajestary_db بگذار و Collation را روی utf8mb4_persian_ci قرار بده (برای پشتیبانی کامل از فارسی).
  5. دکمه Create را بزن.

⚠️ نکته مهم مهمان:

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


🔌 مرحله ۱: اتصال به دیتابیس با PDO

برای اتصال، به ۴ اطلاعات نیاز داریم:
1. نوع دیتابیس (mysql)
2. هاست (localhost)
3. نام دیتابیس (rajestary_db)
4. نام کاربری (root) و رمز عبور (در XAMPP معمولاً خالی است).



🔌
db_connect.php

PHP
8.x



<?php

// اطلاعات اتصال
$host = 'localhost';
$dbname = 'rajestary_db';
$username = 'root';
$password = ''; // در XAMPP رمز عبور خالی است

try {
    // ایجاد اتصال PDO
    $pdo = new PDO(
        "mysql:host=$host;dbname=$dbname;charset=utf8mb4",
        $username,
        $password
    );

    // تنظیم حالت خطا به Exception برای مدیریت بهتر
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    echo "✅ اتصال به دیتابیس با موفقیت برقرار شد.";

} catch (PDOException $e) {
    die("❌ خطا در اتصال: " . $e->getMessage());
}

📝 مرحله ۲: ساخت جدول کاربران

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



📝
create_table.php

PHP
8.x



<?php
// فرض می‌کنیم فایل db_connect.php شامل شده است
require_once 'db_connect.php';

$sql = "CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";

try {
    $pdo->exec($sql);
    echo "✅ جدول users با موفقیت ساخته شد.";
} catch (PDOException $e) {
    echo "❌ خطا: " . $e->getMessage();
}

💾 مرحله ۳: ثبت اطلاعات (INSERT) با امنیت بالا

مهم‌ترین بخش درس اینجاست! هرگز متغیرها را مستقیم داخل رشته SQL نگذار. از Prepared Statements استفاده کن تا هکرها نتوانند کد مخرب تزریق کنند.



💾
insert_user.php

PHP
8.x



<?php
require_once 'db_connect.php';

$name = 'یونس رجستری';
$email = 'younes@rajestary.com';

// آماده‌سازی کوئری با Placeholders (?)
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");

try {
    // اجرای کوئری و ارسال مقادیر واقعی
    $stmt->execute([$name, $email]);
    echo "✅ کاربر جدید با موفقیت ثبت شد.";
} catch (PDOException $e) {
    echo "❌ خطا در ثبت: " . $e->getMessage();
}

🔍 مرحله ۴: خواندن اطلاعات (SELECT)

برای نمایش لیست کاربران از حلقه foreach روی خروجی PDO استفاده می‌کنیم.



🔍
select_users.php

PHP
8.x



<?php
require_once 'db_connect.php';

$stmt = $pdo->query("SELECT * FROM users ORDER BY id DESC");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (count($users) > 0) {
    echo "<ul>";
    foreach ($users as $user) {
        echo "<li>{$user['name']} - {$user['email']}</li>";
    }
    echo "</ul>";
} else {
    echo "هیچ کاربری یافت نشد.";
}

❌ خطاهای رایج مبتدیان

🚫 اشتباه مرگبار:

استفاده مستقیم از متغیر در کوئری مثل: "INSERT INTO users VALUES ('$name')". این کار راه را برای هکرهای SQL Injection باز می‌کند! همیشه از prepare و execute استفاده کن.

  • فراموش کردن charset: اگر charset=utf8mb4 را در DSN نگذاری، حروف فارسی به صورت ؟؟؟ ذخیره می‌شوند.
  • عدم مدیریت خطا: اگر از try/catch استفاده نکنی، با کوچکترین خطا کل سایت سفید می‌شود.

🏁 جمع‌بندی درس اول

مهمان عزیز، در این درس یاد گرفتی:

  • ✅ چگونه با PDO به دیتابیس متصل شوی.
  • ✅ چگونه جدول بسازی.
  • ✅ چگونه داده‌ها را به صورت امن (Prepared Statement) ذخیره کنی.
  • ✅ چگونه داده‌ها را بخوانی و نمایش دهی.

🎓 تمرین عملی درس اول

یک فرم HTML ساده بساز که نام و ایمیل بگیرد و با استفاده از کدهای این درس، آن‌ها را در دیتابیس ذخیره کند.


🗺️ نقشه راه دوره: شما اینجا هستید!

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

درس عنوان درس آنچه یاد می‌گیرید
۱ ارتباط با دیتابیس (PDO) اتصال امن به MySQL، جلوگیری از SQL Injection
۲ مدیریت نشست‌ها (Sessions) ساخت سیستم لاگین/خروج، مدیریت دسترسی کاربران
۳ کار با فایل‌ها (File Handling) آپلود تصویر، خواندن و نوشتن در فایل‌ها
۴ مدیریت خطاها (Error Handling) استفاده از Try/Catch، لاگ‌گیری خطاها
۵ مقدمه‌ای بر شی‌گرایی (OOP) کلاس، شیء، متد، ویژگی‌ها
۶ ساختاردهی پروژه (MVC مقدماتی) جداسازی منطق از ظاهر، فایل‌های Config
۷ امنیت پیشرفته هش کردن پسورد، محافظت در برابر XSS و CSRF
۸ کار با API (مقدماتی) دریافت داده از API خارجی (cURL)، JSON
۹ پروژه نهایی سطح متوسط ساخت وبلاگ کامل با قابلیت لاگین و مدیریت

🔗 لینک‌های مرتبط

👤
نویسنده یونس رجستری
📅
تاریخ انتشار 28 مرداد 1405
🔄
آخرین بروزرسانی 28 مرداد 1405
ارسال دیدگاه

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

⚠️

هشدار مهم!

برای اتصال به درگاه پرداخت و انجام تراکنش، لطفاً VPN یا فیلترشکن خود را خاموش کنید.

⏳ ادامه در
5
ثانیه