สร้าง MySQL Database ใน cPanel ตั้งแต่เริ่มต้น

คู่มือทีละขั้นตอน สร้าง Database, User และเชื่อมต่อกับ PHP ได้ทันที

สร้าง MySQL Database ใน cPanel ตั้งแต่เริ่มต้น MySQL

MySQL เป็นระบบจัดการฐานข้อมูลที่ได้รับความนิยมสูงสุดสำหรับเว็บแอปพลิเคชัน ไม่ว่าจะเป็น WordPress, Joomla, Drupal หรือโปรเจกต์ PHP ที่เขียนเอง ล้วนต้องการ MySQL Database เพื่อเก็บข้อมูล บทความนี้จะแนะนำวิธีสร้าง MySQL Database ผ่าน cPanel ทีละขั้นตอน ตั้งแต่เริ่มต้นจนถึงเชื่อมต่อกับ PHP ได้สำเร็จ

ทำความเข้าใจ MySQL Wizard ใน cPanel

cPanel มีเครื่องมือสร้าง MySQL Database อยู่ 2 แบบ คือ

บทความนี้จะสอนทั้งสองวิธี เริ่มจาก 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 ระบบจะแจ้งว่าการตั้งค่าเสร็จสมบูรณ์

หมายเหตุ: ในสภาพแวดล้อม Production จริง ควรกำหนดสิทธิ์เฉพาะที่จำเป็น เช่น SELECT, INSERT, UPDATE, DELETE แทนการให้ ALL PRIVILEGES เพื่อความปลอดภัย

วิธีที่ 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("ไม่สามารถเชื่อมต่อฐานข้อมูลได้ กรุณาลองใหม่อีกครั้ง");
}
?>
Tip: ควรเก็บค่า $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 เครื่องมือนี้ช่วยให้คุณ

phpMyAdmin เหมาะสำหรับการ backup ข้อมูลด้วย Export และการ restore ด้วย Import โดยไม่ต้องเข้า SSH เลย

เคล็ดลับ Security ที่ควรทำตั้งแต่ต้น

การตั้งค่าความปลอดภัยตั้งแต่เริ่มต้นจะช่วยป้องกันปัญหาในอนาคต ควรปฏิบัติดังนี้


ตรวจสอบว่า 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;
?>
Tip: ถ้ารัน script นี้แล้วได้ MySQL Version กลับมา แสดงว่าการเชื่อมต่อสำเร็จ ถ้า Charset แสดงว่า 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 ทุกไฟล์ที่ใช้รหัสผ่านนี้ด้วย