MySQL
MySQL เป็นระบบจัดการฐานข้อมูลที่ได้รับความนิยมสูงสุดสำหรับเว็บแอปพลิเคชัน ไม่ว่าจะเป็น WordPress, Joomla, Drupal หรือโปรเจกต์ PHP ที่เขียนเอง ล้วนต้องการ MySQL Database เพื่อเก็บข้อมูล บทความนี้จะแนะนำวิธีสร้าง MySQL Database ผ่าน cPanel ทีละขั้นตอน ตั้งแต่เริ่มต้นจนถึงเชื่อมต่อกับ PHP ได้สำเร็จ
ทำความเข้าใจ MySQL Wizard ใน cPanel
cPanel มีเครื่องมือสร้าง MySQL Database อยู่ 2 แบบ คือ
- MySQL Databases — จัดการเองทีละขั้นตอน เหมาะสำหรับผู้ที่ต้องการควบคุมรายละเอียด
- MySQL Database Wizard — ตัวช่วยแบบ Step-by-Step เหมาะสำหรับมือใหม่ที่ต้องการความรวดเร็ว
บทความนี้จะสอนทั้งสองวิธี เริ่มจาก Wizard ก่อนเพื่อให้เข้าใจภาพรวม แล้วต่อด้วยวิธีแบบ Manual ที่ยืดหยุ่นกว่า
วิธีที่ 1: สร้าง Database ด้วย MySQL Database Wizard
เข้าสู่ cPanel แล้วมองหาหมวด Databases คลิก MySQL Database Wizard จะเข้าสู่หน้าที่แบ่งเป็น 4 ขั้นตอน ดังนี้
ขั้นตอนที่ 1: สร้าง Database
ใส่ชื่อ Database ที่ต้องการในช่อง New Database ระบบจะเติม prefix ชื่อบัญชีให้อัตโนมัติ เช่น ถ้าบัญชีของคุณชื่อ mysite และตั้งชื่อว่า mydb ชื่อจริงจะกลายเป็น mysite_mydb คลิก Next Step
ขั้นตอนที่ 2: สร้าง Database User
ใส่ชื่อ User และรหัสผ่านที่แข็งแรง แนะนำให้ใช้ปุ่ม Password Generator เพื่อสร้างรหัสผ่านที่ปลอดภัย จดบันทึกรหัสผ่านนี้ไว้ เพราะจะต้องใช้ในการเชื่อมต่อ PHP คลิก Create User
ขั้นตอนที่ 3: กำหนดสิทธิ์ (Privileges)
ติ๊กช่อง ALL PRIVILEGES เพื่อให้ User นี้มีสิทธิ์เต็มกับ Database ที่สร้างไว้ จากนั้นคลิก Next Step ระบบจะแจ้งว่าการตั้งค่าเสร็จสมบูรณ์
วิธีที่ 2: สร้าง Database แบบ Manual
กลับไปที่ cPanel หมวด Databases คลิก MySQL Databases จะมีส่วนต่างๆ ให้จัดการดังนี้
สร้าง Database ใหม่
ในส่วน Create New Database ใส่ชื่อ Database แล้วคลิก Create Database ระบบจะแจ้งว่า "Added the database" เมื่อสำเร็จ
สร้าง MySQL User ใหม่
เลื่อนลงมาที่ส่วน MySQL Users คลิก Add New User ใส่ชื่อ User และรหัสผ่าน จากนั้นคลิก Create User
เพิ่ม User เข้า Database
ในส่วน Add User To Database เลือก User ที่เพิ่งสร้างในช่อง User และเลือก Database ในช่อง Database คลิก Add จะมีหน้า Privilege เด้งขึ้นมาให้เลือกสิทธิ์ เลือก ALL PRIVILEGES แล้วคลิก Make Changes
เชื่อมต่อ MySQL Database กับ PHP
เมื่อสร้าง Database, User และกำหนดสิทธิ์เรียบร้อยแล้ว ขั้นตอนต่อไปคือเขียนโค้ด PHP เพื่อเชื่อมต่อ แนะนำใช้ PDO ซึ่งปลอดภัยและยืดหยุ่นกว่า mysqli เดิม
<?php
// ข้อมูลการเชื่อมต่อ MySQL
$host = 'localhost';
$dbname = 'mysite_mydb'; // ชื่อ Database ที่สร้างใน cPanel
$username = 'mysite_myuser'; // ชื่อ MySQL User
$password = 'YourStrongP@ssword123';
try {
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$pdo = new PDO($dsn, $username, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
echo "เชื่อมต่อ Database สำเร็จ!";
} catch (PDOException $e) {
// ใน Production ห้าม echo error ออกตรงๆ ให้ log แทน
error_log("DB Error: " . $e->getMessage());
die("ไม่สามารถเชื่อมต่อฐานข้อมูลได้ กรุณาลองใหม่อีกครั้ง");
}
?>
$password และ $username ไว้ในไฟล์ .env หรือไฟล์ config ที่ไม่ได้อยู่ใน public folder เพื่อป้องกันข้อมูลรั่วไหลตัวอย่างการสร้างตารางและ Insert ข้อมูลครั้งแรก
หลังจากเชื่อมต่อได้แล้ว ลองสร้างตารางและ insert ข้อมูลทดสอบเพื่อยืนยันว่าทุกอย่างทำงานถูกต้อง
<?php
// สร้างตาราง users (ทำครั้งเดียว)
$pdo->exec("
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) NOT NULL UNIQUE,
created DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
");
// Insert ข้อมูลทดสอบด้วย Prepared Statement
$stmt = $pdo->prepare(
"INSERT INTO users (name, email) VALUES (:name, :email)"
);
$stmt->execute([
':name' => 'สมชาย ใจดี',
':email' => '[email protected]',
]);
echo "เพิ่มข้อมูลสำเร็จ! ID = " . $pdo->lastInsertId();
// ดึงข้อมูลออกมาแสดง
$rows = $pdo->query("SELECT * FROM users")->fetchAll();
foreach ($rows as $row) {
echo $row['id'] . ' - ' . $row['name'] . ' (' . $row['email'] . ')' . PHP_EOL;
}
?>
จัดการ Database ผ่าน phpMyAdmin
นอกจากโค้ด PHP แล้ว cPanel ยังมี phpMyAdmin ให้ใช้งานฟรี เข้าถึงได้จากหมวด Databases คลิก phpMyAdmin เครื่องมือนี้ช่วยให้คุณ
- สร้าง ลบ แก้ไขตารางและ field ผ่าน UI โดยไม่ต้องเขียน SQL
- Import และ Export ข้อมูลในรูปแบบ SQL, CSV, Excel
- รัน SQL Query โดยตรงเพื่อทดสอบ
- ดู structure และ index ของตารางทั้งหมด
phpMyAdmin เหมาะสำหรับการ backup ข้อมูลด้วย Export และการ restore ด้วย Import โดยไม่ต้องเข้า SSH เลย
เคล็ดลับ Security ที่ควรทำตั้งแต่ต้น
การตั้งค่าความปลอดภัยตั้งแต่เริ่มต้นจะช่วยป้องกันปัญหาในอนาคต ควรปฏิบัติดังนี้
- ใช้รหัสผ่านที่มีความยาวอย่างน้อย 16 ตัวอักษร ประกอบด้วยตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก ตัวเลข และอักขระพิเศษ
- ไม่ควรใช้ User เดียวกันสำหรับหลาย Database โดยเฉพาะ Production และ Development
- ใช้ Prepared Statement เสมอเพื่อป้องกัน SQL Injection
- หลีกเลี่ยงการ connect database ด้วย root user ใน application code
- ตรวจสอบ error_log สม่ำเสมอเพื่อจับ query ผิดพลาดตั้งแต่เนิ่นๆ
ตรวจสอบว่า MySQL Database ทำงานถูกต้อง
สร้าง Database เสร็จแล้ว ให้ตรวจสอบความถูกต้องผ่านโค้ด PHP ดังนี้
<?php
// 1. ตรวจสอบว่าเชื่อมต่อได้
$pdo = new PDO("mysql:host=localhost;dbname=mysite_mydb;charset=utf8mb4",
"mysite_myuser", "YourPassword");
// 2. ตรวจสอบ MySQL version ที่ Hosting ใช้
$version = $pdo->query("SELECT VERSION()")->fetchColumn();
echo "MySQL Version: " . $version . PHP_EOL;
// 3. ดูรายชื่อตารางใน Database
$tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
echo "Tables: " . implode(', ', $tables) . PHP_EOL;
// 4. ตรวจสอบ charset ที่ใช้งาน
$charset = $pdo->query(
"SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = DATABASE()"
)->fetchColumn();
echo "Charset: " . $charset . PHP_EOL;
// 5. นับจำนวน rows ในตาราง
$count = $pdo->query("SELECT COUNT(*) FROM users")->fetchColumn();
echo "Total users: " . $count . PHP_EOL;
?>
utf8mb4 แสดงว่าตั้งค่าถูกต้องสำหรับรองรับภาษาไทยและ Emoji ได้เต็มที่แก้ปัญหาที่พบบ่อย
Error: "Access denied for user 'mysite_myuser'@'localhost'"
ปัญหานี้เกิดจาก User ยังไม่ได้ถูก Add เข้า Database หรือรหัสผ่านผิด ให้กลับไป cPanel เข้าหน้า MySQL Databases ตรวจสอบว่า User นั้นอยู่ในรายการ Current Users ใต้ Database หรือยัง ถ้ายังให้ทำขั้นตอน "Add User To Database" ใหม่ และตรวจสอบให้แน่ใจว่าใช้รหัสผ่านที่ถูกต้อง
Error: "Unknown database 'mysite_mydb'"
ชื่อ Database ในโค้ด PHP ไม่ตรงกับที่สร้างใน cPanel ให้กลับไปดูชื่อ Database จริงในหน้า MySQL Databases ของ cPanel จะเห็นชื่อเต็มที่มี prefix เช่น mysite_mydb แล้วนำชื่อนั้นมาใส่ในโค้ดให้ครบทั้ง prefix
Error: "Can't connect to MySQL server on 'localhost'"
ใน Shared Hosting ปกติ host ต้องเป็น localhost เสมอ ไม่ใช่ IP address หรือ domain name ของ server ถ้าเปลี่ยนเป็น localhost แล้วยังไม่หายให้ติดต่อ Support ของ Hosting เพื่อตรวจสอบว่า MySQL service ทำงานปกติหรือไม่
Error: "Too many connections"
เกิดขึ้นเมื่อมีการเปิด Connection ไปยัง Database มากเกินกว่าที่ Hosting กำหนด แก้ไขโดยใช้ Singleton Pattern เพื่อสร้าง PDO Object เพียงครั้งเดียวต่อ Request และปิด Connection ด้วยการ set $pdo = null หลังใช้งานเสร็จ
Error: "Incorrect string value" เมื่อ Insert ภาษาไทย
เกิดจาก Database หรือตารางใช้ charset ที่ไม่รองรับภาษาไทย แก้ไขโดยกำหนด charset ตอนสร้างตารางให้เป็น utf8mb4 และใส่ charset=utf8mb4 ใน DSN ของ PDO ด้วย ถ้าตารางเก่าแล้วให้รัน ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ใน phpMyAdmin
คำถามที่พบบ่อย
Shared Hosting สร้าง MySQL Database ได้กี่ Database?
ขึ้นอยู่กับแผน Hosting ที่ใช้ โดยทั่วไปแผนพื้นฐานจะอนุญาต 3-10 Database แผนระดับกลางขึ้นไปมักให้ Unlimited Database ให้ตรวจสอบรายละเอียดแผนในหน้า Hosting Plan ของผู้ให้บริการ หรือดูได้ใน cPanel ที่ Disk Usage Summary
สามารถเชื่อมต่อ MySQL จากเครื่องของตัวเองผ่าน MySQL Workbench ได้ไหม?
ได้ แต่ต้องเปิดใช้งาน Remote MySQL ก่อน โดยไปที่ cPanel เมนู Remote MySQL แล้วเพิ่ม IP address ของคุณเข้าไป จากนั้น connect ด้วย host เป็น domain ของเว็บ port 3306 และใช้ username/password ของ MySQL User ที่สร้างไว้
ถ้าลืมรหัสผ่าน MySQL User ต้องทำอย่างไร?
ไม่สามารถดูรหัสผ่านเดิมได้ แต่สามารถตั้งรหัสผ่านใหม่ได้ โดยไปที่ cPanel เมนู MySQL Databases เลื่อนไปส่วน Current Users คลิก Change Password ข้างชื่อ User นั้น ตั้งรหัสผ่านใหม่แล้วอย่าลืมอัพเดทโค้ด PHP ทุกไฟล์ที่ใช้รหัสผ่านนี้ด้วย