هر آنچه برای ساخت دیتابیس، اتصال با PHP، رفع خطاهای رایج، وارد کردن بکاپ و امنیت MySQL نیاز دارید.
همین حالا دیتابیس خود را مدیریت کنید!
مقالات به سه گروه دستهبندی شدهاند. روی هر عنوان کلیک کنید تا محتوای کامل باز شود.
در کنار هاست رایگان، میتوانید از پنل پیامک رایگان و ثبت دامنه ارزان پارسه دو هم استفاده کنید.
ساخت پایگاه داده، اتصال با PHP و اتصال خارجی
بسیاری از اسکریپتها و سیستمهای مدیریت محتوا برای ذخیره اطلاعات خود به پایگاه داده MySQL نیاز دارند. مواردی مانند وردپرس، انجمنها، فروشگاههای اینترنتی و بسیاری از برنامههای PHP بدون دیتابیس قادر به فعالیت کامل نیستند.
برای استفاده از این اسکریپتها، ابتدا باید یک پایگاه داده جدید ایجاد کرده و اطلاعات اتصال آن را در تنظیمات سایت وارد کنید.
قبل از استفاده از دیتابیس، ابتدا باید آن را در کنترل پنل هاست ایجاد کنید. مراحل ایجاد پایگاه داده:
MySQL Databases برویدCreate Database کلیک کنید تا پایگاه داده ساخته شودپس از ساخت دیتابیس، برای اتصال اسکریپت خود به MySQL به چهار اطلاعات اصلی نیاز دارید:
این اطلاعات معمولاً در فایل تنظیمات اسکریپت یا هنگام نصب برنامه از شما درخواست میشوند.
برای مشاهده این اطلاعات:
MySQL Databases برویدسپس این موارد را در فایل تنظیمات یا صفحه نصب اسکریپت وارد کنید.
رمز عبور دیتابیس معمولاً همان رمز حساب میزبانی است که هنگام ایجاد هاست برای شما تعیین شده است. برای مشاهده رمز عبور:
پس از وارد کردن اطلاعات صحیح، اسکریپت شما میتواند با پایگاه داده ارتباط برقرار کند. معمولاً فایل تنظیمات شامل بخشی مشابه موارد زیر است:
Database Name: نام دیتابیس Username: نام کاربر MySQL Password: رمز عبور Host: آدرس سرور MySQL
بعد از ذخیره تنظیمات، سایت یا نرمافزار شما قادر خواهد بود اطلاعات را در دیتابیس ذخیره و بازیابی کند.
localhost برای Host استفاده نکنید، مگر اینکه شرکت هاستینگ آن را اعلام کرده باشدپایگاه داده MySQL یکی از اصلیترین بخشهای بسیاری از وبسایتهای پویا مانند وردپرس، فروشگاههای اینترنتی و اسکریپتهای PHP است. برای ارتباط بین سایت و پایگاه داده، معمولاً از دو روش محبوب PDO و MySQLi استفاده میشود.
هر دو کتابخانه PDO و MySQLi در نسخههای مختلف PHP در دسترس هستند و بیشتر اسکریپتهای مدرن PHP برای اتصال به MySQL از یکی از این دو روش استفاده میکنند.
برای اتصال سایت به پایگاه داده، به چهار اطلاعات اصلی نیاز دارید:
این اطلاعات معمولاً در بخش Current Databases داخل قسمت پایگاههای داده MySQL در کنترل پنل نمایش داده میشوند.
یکی از اشتباهات رایج هنگام نصب اسکریپتها، استفاده از مقدار localhost برای نام میزبان است. بسیاری از اسکریپتها به صورت پیشفرض این مقدار را قرار میدهند، اما در هاست اشتراکی همیشه صحیح نیست.
برای اتصال موفق، باید نام دقیق سرور MySQL را که در بخش دیتابیسهای کنترل پنل نمایش داده شده است وارد کنید. استفاده از مقدار اشتباه در این قسمت باعث خطاهایی مانند عدم اتصال به دیتابیس، خطای اتصال MySQL یا خطای نصب اسکریپت خواهد شد.
نمونه ساده اتصال با MySQLi:
<?php
$host = "mysql-host";
$user = "database-user";
$password = "database-password";
$database = "database-name";
$conn = mysqli_connect($host, $user, $password, $database);
if (!$conn) {
die("Database connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
روش دیگر استفاده از PDO است:
<?php
$host = "mysql-host";
$dbname = "database-name";
$username = "database-user";
$password = "database-password";
try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$username,
$password
);
$pdo->setAttribute(
PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION
);
echo "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
استفاده از utf8mb4 پیشنهاد میشود تا اطلاعات فارسی، زبانهای مختلف و کاراکترهای خاص بدون مشکل ذخیره شوند.
در سرویسهای هاست اشتراکی رایگان، اتصال مستقیم خارجی به پایگاه داده معمولاً امکانپذیر نیست. یعنی:
utf8mb4 استفاده کنیدگاهی اوقات ممکن است بخواهید از طریق یک برنامه خارج از محیط هاست، به پایگاه داده MySQL خود متصل شوید. برای مثال:
اما در سرویسهای هاست رایگان VCP، اتصال مستقیم و خارجی به پایگاه داده MySQL امکانپذیر نیست.
خیر. در هاست رایگان، دسترسی مستقیم به دیتابیس MySQL فقط از داخل همان محیط میزبانی امکانپذیر است.
شما میتوانید از روشهای زیر با پایگاه داده خود کار کنید:
اما اتصال مستقیم از موارد زیر امکانپذیر نیست:
محدود کردن دسترسی مستقیم به MySQL یک اقدام امنیتی و مدیریتی است. این محدودیت باعث میشود:
اگر قصد دارید یک برنامه یا سایت را به MySQL متصل کنید، بهترین روش این است که:
برای مثال، به جای اتصال مستقیم اپلیکیشن موبایل به MySQL، بهتر است یک API امن با PHP ایجاد کنید تا اطلاعات مورد نیاز را از طریق آن دریافت یا ارسال کند.
در سرویسهای حرفهای یا پریمیوم، معمولاً امکان فعالسازی دسترسی Remote MySQL وجود دارد. در این حالت میتوان مشخص کرد که چه آدرسهایی اجازه اتصال به دیتابیس را داشته باشند و نرمافزارهای خارجی بتوانند به شکل کنترلشده به MySQL متصل شوند.
حروف ناخوانا، phpMyAdmin و خطاهای اتصال
گاهی هنگام کار با وبسایتهای PHP و MySQL ممکن است حروف فارسی، زبانهای غیرلاتین، کاراکترهای خاص یا ایموجیها به شکل علامت سؤال (????) یا متنهای نامفهوم نمایش داده شوند.
این مشکل معمولاً زمانی رخ میدهد که اطلاعات از طریق phpMyAdmin وارد شده باشد و در سایت به درستی نمایش داده نشود، یا اطلاعاتی که توسط PHP ذخیره شدهاند در phpMyAdmin خراب دیده شوند.
این مشکل معمولاً در زمان ارتباط بین PHP و MySQL دیده میشود:
دلیل اصلی این مشکل معمولاً به Charset اتصال دیتابیس مربوط میشود. Charset مشخص میکند اطلاعات متنی چگونه بین PHP و MySQL منتقل و ذخیره شوند. برای سایتهای امروزی بهترین انتخاب استفاده از utf8mb4 است. این Charset از زبان فارسی، زبانهای مختلف، کاراکترهای خاص و ایموجیها پشتیبانی میکند.
در بعضی سرورها تنظیم پیشفرض اتصال ممکن است latin1 باشد. اما برای سایتهای فارسی این تنظیم مناسب نیست و ممکن است باعث خراب شدن متنها هنگام ذخیره یا نمایش شود. به همین دلیل بهتر است Charset اتصال PHP همیشه به صورت دستی روی utf8mb4 تنظیم شود.
برای جلوگیری از این مشکل باید هنگام اتصال PHP به دیتابیس Charset مناسب را مشخص کنید.
نمونه اتصال:
$mysqli = new mysqli(
'localhost',
'username',
'password',
'database'
);
$mysqli->set_charset('utf8mb4');
روش رویهای:
$mysqli = mysqli_connect( 'localhost', 'username', 'password', 'database' ); mysqli_set_charset($mysqli, 'utf8mb4');
در PDO بهتر است Charset هنگام اتصال مشخص شود:
$dsn = 'mysql:host=localhost;dbname=database;charset=utf8mb4'; $pdo = new PDO( $dsn, 'username', 'password' );
با این تنظیم، اطلاعات فارسی و کاراکترهای خاص بدون مشکل بین PHP و MySQL منتقل میشوند.
خیر. اگر اطلاعات قبلاً با تنظیم اشتباه ذخیره شده باشند، تغییر Charset اتصال به صورت خودکار آنها را اصلاح نمیکند. برای سایتهای تازه راهاندازی شده بهتر است اطلاعات خراب حذف و دوباره وارد شوند. برای سایتهای فعال نیز قبل از تغییرات مهم، حتماً از دیتابیس نسخه پشتیبان تهیه کنید.
بسیاری تصور میکنند تغییر Collation مشکل نمایش حروف را حل میکند، اما این درست نیست. Charset مسئول ذخیره و انتقال صحیح کاراکترها است. Collation برای مقایسه، مرتبسازی و جستجوی اطلاعات استفاده میشود. بنابراین برای رفع مشکل نمایش فارسی، ابتدا باید Charset اتصال بررسی شود.
utf8mb4 استفاده کنیدگاهی کاربران هنگام ورود به phpMyAdmin از طریق کنترل پنل هاست با مشکل مواجه میشوند و نمیتوانند به مدیریت پایگاه داده خود دسترسی پیدا کنند. یکی از خطاهای رایج در این شرایط، خطای زیر است:
ERR_TOO_MANY_REDIRECTS
یا پیامهایی مانند «صفحه به درستی هدایت نمیشود» یا «تعداد تغییر مسیرها بیش از حد مجاز است». این مشکل معمولاً پس از تغییر رمز عبور حساب هاست یا تغییر اطلاعات ورود رخ میدهد.
یکی از رایجترین دلایل مشکل ورود به phpMyAdmin، باقی ماندن اطلاعات قدیمی در حافظه مرورگر است. زمانی که رمز عبور حساب هاست تغییر میکند، ممکن است مرورگر همچنان اطلاعات ورود قبلی را ذخیره کرده باشد. در این حالت phpMyAdmin تلاش میکند با اطلاعات قدیمی به دیتابیس متصل شود، اما چون رمز قبلی دیگر معتبر نیست، فرآیند ورود با مشکل مواجه میشود.
برای رفع این مشکل:
اگر پس از پاک کردن کش و کوکی هنوز مشکل ادامه داشت، میتوانید از حالت Private یا Incognito مرورگر استفاده کنید. حالت ناشناس باعث میشود مرورگر بدون استفاده از اطلاعات ذخیرهشده قبلی، یک نشست جدید ایجاد کند.
برای مثال:
Ctrl + Shift + NCtrl + Shift + Pرا فشار دهید و سپس دوباره وارد کنترل پنل و phpMyAdmin شوید. در بسیاری از موارد، این روش مشکل ورود را برطرف میکند.
گاهی پس از تغییر رمز عبور، اطلاعات جدید به صورت کامل در سیستم پایگاه داده اعمال نمیشود. در این شرایط میتوانید رمز عبور حساب هاست خود را دوباره تغییر دهید تا اطلاعات ورود مجدداً همگامسازی شود.
مراحل پیشنهادی:
در صورت نیاز، بعداً میتوانید رمز عبور را به مقدار قبلی تغییر دهید.
بسیاری از وبسایتهای امروزی برای ذخیره اطلاعاتی مانند کاربران، نوشتهها، تنظیمات، محصولات و سایر دادههای پویا از پایگاه داده MySQL استفاده میکنند. با این حال، گاهی اوقات هنگام اتصال سایت به پایگاه داده مشکلاتی رخ میدهد که باعث نمایش خطا یا از کار افتادن بخشی از سایت میشود.
اتصال به پایگاه داده معمولاً توسط اطلاعاتی مانند نام کاربری، رمز عبور، نام پایگاه داده و نام میزبان (Host) انجام میشود. اگر یکی از این موارد اشتباه باشد یا تنظیمات سرور هماهنگ نباشد، اتصال با خطا مواجه خواهد شد.
یکی از رایجترین پیامهایی که در سایتها مشاهده میشود:
Unable to connect to database Database connection error
این خطا به این معنی است که اسکریپت سایت نتوانسته با سرور MySQL ارتباط برقرار کند.
دلایل احتمالی این مشکل عبارتند از:
در بسیاری از سیستمهای مدیریت محتوا مانند وردپرس، پیام خطا به صورت عمومی نمایش داده میشود تا اطلاعات حساس سایت افشا نشود. برای مشاهده جزئیات بیشتر میتوانید حالت اشکالزدایی (Debug Mode) را فعال کنید. در وردپرس این کار از طریق گزینه WP_DEBUG در فایل wp-config.php انجام میشود.
اگر خودتان کدنویسی سایت را انجام دادهاید، میتوانید خطاهای اتصال MySQL را با توابع زیر بررسی کنید:
برای MySQLi: mysqli_connect_error(); و mysqli_error();
برای PDO: PDOException
این خطا معمولاً زمانی رخ میدهد که در تنظیمات اتصال MySQL از مقدار localhost استفاده شده باشد. بسیاری از کاربران تصور میکنند همیشه باید از localhost استفاده کنند، اما در اکثر سرویسهای هاست اشتراکی، پایگاه داده روی سرور جداگانه قرار دارد. بنابراین باید از نام میزبان واقعی MySQL استفاده کنید. برای مثال sql123.example.com یا مقداری مشابه که توسط شرکت هاستینگ ارائه شده است.
این اطلاعات معمولاً در کنترل پنل هاست، بخش MySQL Databases قابل مشاهده است.
نمونه این خطا:
Access denied for user 'username'@'server'
این پیام نشان میدهد که اتصال به سرور انجام شده، اما اطلاعات ورود صحیح نیست یا کاربر اجازه دسترسی به پایگاه داده موردنظر را ندارد.
گاهی کاربران فقط نام کوتاه پایگاه داده را وارد میکنند، در حالی که نام کامل شامل پیشوند حساب نیز هست. برای مثال نام وارد شده mydatabase اما نام واقعی accountname_mydatabase است. نام دقیق پایگاه داده را همیشه از بخش مدیریت MySQL در کنترل پنل بررسی کنید.
توجه داشته باشید که رمز عبور پایگاه داده معمولاً با رمز ورود پنل کاربری متفاوت است. برای اتصال سایت باید از رمز مربوط به حساب میزبانی یا دیتابیس استفاده کنید، نه رمز ورود به پنل مشتری.
اگر موارد زیر را بررسی کردهاید:
اما همچنان اتصال برقرار نمیشود، موارد زیر را بررسی کنید:
وارد کردن نسخه پشتیبان و جلوگیری از SQL Injection
اگر قصد دارید وبسایت خود را از یک شرکت هاستینگ دیگر به VCP منتقل کنید، یا میخواهید اطلاعات یک پایگاه داده قدیمی را بازیابی کنید، میتوانید از فایل پشتیبان (Database Dump) مربوط به MySQL استفاده کنید.
فایلهای پشتیبان پایگاه داده معمولاً با فرمتهایی مانند .sql ذخیره میشوند و شامل ساختار جداول، اطلاعات کاربران، تنظیمات سایت و سایر دادههای موجود در دیتابیس هستند. قبل از شروع فرآیند انتقال، ابتدا باید یک پایگاه داده جدید ایجاد کرده و تنظیمات سایت خود را برای استفاده از آن تغییر دهید.
برای انتقال اطلاعات پایگاه داده، مراحل زیر را انجام دهید:
ابتدا وارد کنترل پنل هاست شوید و از بخش مدیریت پایگاه داده MySQL، یک دیتابیس جدید ایجاد کنید. پس از ایجاد دیتابیس، اطلاعات زیر را یادداشت کنید:
این اطلاعات برای اتصال سایت شما به دیتابیس جدید مورد نیاز است.
پس از ایجاد دیتابیس:
برای انتقال اطلاعات:
Import (درونریزی) کلیک کنید.sql را انتخاب کنیدGo (اجرا) کلیک کنیدپس از پایان عملیات، تمام جدولها و اطلاعات موجود در فایل پشتیبان به پایگاه داده جدید منتقل خواهند شد.
اگر حجم فایل SQL شما زیاد باشد، ممکن است phpMyAdmin نتواند آن را به صورت کامل وارد کند. این مشکل معمولاً به دلیل محدودیتهای زیر رخ میدهد:
در این شرایط ممکن است هنگام Import با خطاهایی مانند قطع شدن عملیات یا پایان زمان اجرا مواجه شوید.
برای وارد کردن فایلهای حجیم میتوانید از ابزارهایی مانند BigDump استفاده کنید. BigDump یک اسکریپت سبک PHP است که فایل SQL بزرگ را به بخشهای کوچکتر تقسیم کرده و آنها را مرحلهبهمرحله وارد دیتابیس میکند.
مزیت استفاده از این روش:
قبل از Import کردن فایل SQL بهتر است:
wp-config.php را با اطلاعات دیتابیس جدید هماهنگ کنیدیکی از اشتباهات رایج در بین برنامهنویسان تازهکار PHP، نوشتن کدی است که در برابر حملات SQL Injection آسیبپذیر است. حملات تزریق SQL میتوانند امنیت کل وبسایت را به خطر بیندازند و باعث دسترسی غیرمجاز به اطلاعات پایگاه داده، تغییر دادهها یا حتی حذف کامل اطلاعات شوند.
خبر خوب این است که با رعایت چند نکته ساده در زمان برنامهنویسی میتوان بهراحتی از این نوع حملات جلوگیری کرد.
SQL Injection نوعی حمله امنیتی است که در آن مهاجم با وارد کردن کدهای مخرب SQL در ورودیهای سایت، تلاش میکند دستورات غیرمجاز را در پایگاه داده اجرا کند.
برای مثال تصور کنید یک فرم ساده برای عضویت کاربران در خبرنامه سایت دارید. کاربر ایمیل خود را وارد میکند و این مقدار در دیتابیس ذخیره میشود. کد آسیبپذیر ممکن است به شکل زیر باشد:
<?php
$email = $_POST['email'];
$sql = "INSERT INTO subscribers (email) VALUES ('$email')";
$result = mysqli_query($connection, $sql);
?>
اگر کاربر یک ایمیل معمولی وارد کند (user@example.com)، کوئری ساختهشده به شکل زیر خواهد بود:
INSERT INTO subscribers (email) VALUES ('user@example.com');
همه چیز به درستی کار میکند. اما مشکل زمانی ایجاد میشود که فردی مقدار مخرب وارد کند. برای مثال: '; DROP TABLE subscribers; --
در این حالت، کد PHP ممکن است چنین دستوری ایجاد کند:
INSERT INTO subscribers (email) VALUES (''); DROP TABLE subscribers; --');
قسمت بعد از -- به عنوان توضیح در SQL در نظر گرفته میشود و اجرا نمیشود. نتیجه این است که مهاجم میتواند باعث اجرای دستورات ناخواسته روی دیتابیس شود.
در شرایط واقعی، حملهکننده ممکن است بتواند:
برای محافظت از کد PHP در برابر SQL Injection دو روش اصلی وجود دارد:
روش اول یعنی دستورات آماده، امنترین و استانداردترین روش محسوب میشود.
در دستورات آماده، ساختار کوئری و اطلاعات واردشده توسط کاربر از یکدیگر جدا میشوند. یعنی داده کاربر هیچوقت مستقیماً وارد متن SQL نمیشود.
نمونه امن با MySQLi:
<?php $email = $_POST['email']; $sql = "INSERT INTO subscribers (email) VALUES (?)"; $statement = mysqli_prepare($connection, $sql); mysqli_stmt_bind_param($statement, "s", $email); $result = mysqli_stmt_execute($statement); ?>
در این روش:
این روش برای پروژههای جدید PHP توصیه میشود.
روش دیگر، پاکسازی ورودیها قبل از ارسال به دیتابیس است. در MySQLi میتوان از تابع mysqli_real_escape_string() استفاده کرد:
<?php
$email = mysqli_real_escape_string($connection, $_POST['email']);
$sql = "INSERT INTO subscribers (email) VALUES ('$email')";
$result = mysqli_query($connection, $sql);
?>
این تابع کاراکترهای خطرناک را تغییر میدهد تا MySQL آنها را به عنوان دستور SQL تفسیر نکند. البته در پروژههای جدید، استفاده از Prepared Statements گزینه بهتر و مطمئنتری است.
برخی برنامهنویسان تصور میکنند همین که از mysqli_prepare استفاده کنند، امنیت کامل ایجاد میشود. اما این کد همچنان مشکل دارد:
<?php
$email = $_POST['email'];
$sql = "INSERT INTO subscribers (email) VALUES ('$email')";
$statement = mysqli_prepare($connection, $sql);
mysqli_stmt_execute($statement);
?>
در اینجا مقدار کاربر همچنان داخل متن SQL قرار گرفته است. روش صحیح این است که مقدار را با پارامتر ارسال کنید (VALUES (?)) و سپس با mysqli_stmt_bind_param() آن را متصل کنید.
PHP توابع مختلفی برای پردازش متن دارد، اما همه آنها برای امنیت SQL مناسب نیستند. برای مثال htmlspecialchars()، addslashes() و filter_var() جایگزین مناسبی برای محافظت از کوئری SQL نیستند.
هر تابع کاربرد خاصی دارد:
htmlspecialchars() برای نمایش امن اطلاعات در HTML استبرای MySQLi از mysqli_real_escape_string() استفاده کنید. برای PDO بهتر است همیشه از Prepared Statements استفاده شود.
پاسخ به سوالات رایج درباره پایگاههای داده MySQL
از بخش MySQL Databases در کنترل پنل هاست، یک دیتابیس جدید ایجاد کنید و اطلاعات اتصال را یادداشت نمایید. برای جزئیات بیشتر هاست رایگان را ببینید.
این مشکل به دلیل Charset نامناسب است. باید اتصال PHP به MySQL روی utf8mb4 تنظیم شود.
با حذف افزونههای سنگین، فعالسازی کش و کاهش تعداد سایتهای روی یک حساب. برای اطلاعات بیشتر محدودیتهای منصفانه را ببینید.
با استفاده از Prepared Statements (دستورات آماده) و اعتبارسنجی ورودیها.
از بخش Import در phpMyAdmin، فایل SQL را آپلود کنید. برای فایلهای حجیم از BigDump استفاده کنید. برای اطلاعات بیشتر آموزش FTP را ببینید.
در هاست رایگان، اتصال خارجی به MySQL برای امنیت مسدود است و فقط از داخل هاست امکانپذیر میباشد.
تمامی حقوق مادی و معنوی این سایت متعلق به هاست رایگان VCP است. © ۱۴۰۵
برای دریافت هاست رایگان و مطالعه مقالات آموزشی همین حالا اقدام کنید.