🚀 درس اول: ارتباط با دیتابیس (PDO)؛ دروازه ورود به دادههای پویا
🎯 هدف این درس: یادگیری روش استاندارد و امن اتصال به دیتابیس MySQL با استفاده از PDO، اجرای کوئریهای SELECT و INSERT، و جلوگیری از حملات SQL Injection.
مهمان عزیز! 👋
تا اینجا یاد گرفتی چطور دادهها را در متغیرها و آرایهها ذخیره کنی. اما مشکل اینجاست که وقتی سرور ریستارت شود یا کاربر صفحه را رفرش کند، تمام آن دادهها از بین میروند.
برای ساخت یک سایت واقعی، ما نیاز به «حافظه دائمی» داریم. اینجاست که دیتابیس (Database) وارد میدان میشود. در این درس، تو یاد میگیری چطور PHP را به دیتابیس متصل کنی و اطلاعات را برای همیشه ذخیره نمایی.
💡 چرا PDO؟
در گذشته از mysql_connect استفاده میشد که منسوخ شده است. امروزه PDO (PHP Data Objects) استاندارد جهانی است چون هم امنتر است، هم از دیتابیسهای مختلف پشتیبانی میکند و هم از Prepared Statements برای امنیت بالا استفاده میکند.
🗄️ پیشنیاز: ساخت دیتابیس در phpMyAdmin
قبل از کدنویسی، باید یک دیتابیس خالی داشته باشیم.
- XAMPP Control Panel را باز کن و Apache و MySQL را Start کن.
- در مرورگر به آدرس
http://localhost/phpmyadminبرو. - روی تب New کلیک کن.
- نام دیتابیس را
rajestary_dbبگذار و Collation را رویutf8mb4_persian_ciقرار بده (برای پشتیبانی کامل از فارسی). - دکمه 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 |
| ۹ | پروژه نهایی سطح متوسط | ساخت وبلاگ کامل با قابلیت لاگین و مدیریت |



