Tu luyện kiểu gì thì cũng có ngày...xuống núi! Sau một thời gian tu luyện SQL trên máy tính cá nhân, một ngày đẹp trời nào đó chúng ta cũng sẽ có "quyết định để đời" đó là đưa mọi thứ lên mạng để...cả triệu người biết "công trình" của ta!
Bạn dành cả tuần để viết website PHP + MySQL.Trên máy cá nhân, mọi thứ chạy mượt như lụa:
- đăng ký tài khoản ✅
- đăng nhập ✅
- thêm dữ liệu ✅
- sửa dữ liệu ✅
OK, thành công rồi, đã đến lúc cho thế giới biết ta là ai! Bạn phấn khởi upload toàn bộ source code lên hosting.
Mở website.
Bấm thử chức năng đăng ký.
Và…
Warning: mysqli_connect(): Access denied for user...
Hoặc:
No database selected
Hoặc đơn giản hơn:
Trang trắng tinh như chưa từng có chuyện gì xảy ra 🤡
Bạn bắt đầu tự hỏi:
“Ủa? Hôm qua chạy ngon mà. Sao lên host lại trở mặt nhanh vậy? Cái host này có vấn đề?!” 😅
👉 Chúc mừng, bạn vừa bước từ “lý thuyết suông” sang “thực chiến”.
Và đây là một trong những lỗi phổ biến nhất của người mới học PHP.
Không kết nối được database sau khi upload host.
PHP không kết nối được MySQL sau khi upload host thường do:
- sai hostname
- sai username
- sai password
- sai tên database
- database chưa được tạo
-
file
config.phpchưa cập nhật đúng thông tin hosting
Ví dụ đời thường
Bạn có chìa khóa nhà riêng ở Việt Nam.
Bạn mang chìa khóa đó sang Mỹ.
Đứng trước một căn nhà hoàn toàn khác.
Rồi cố mở cửa.
👉 Không thể mở được.
Không phải chìa khóa hỏng.
Chỉ là:
Bạn đang dùng chìa khóa cũ cho căn nhà mới. 🤡
👉 Database trên hosting cũng là “căn nhà mới”.
Bạn phải dùng đúng thông tin đăng nhập mới.
Vì sao localhost chạy được nhưng host không chạy?
Trên máy cá nhân, bạn có thể dùng:
$conn = mysqli_connect("localhost", "root", "", "mydb");
Nhưng khi upload lên hosting, thông tin thường sẽ khác hoàn toàn.
Ví dụ trên InfinityFree:
$conn = mysqli_connect(
"sql123.infinityfree.com",
"if0_12345678",
"your_password",
"if0_12345678_mydb"
);
👉 Nếu bạn vẫn để:
"root", ""
thì chắc chắn thất bại.
7 nguyên nhân phổ biến nhất
❌ 1. Vẫn dùng root
Sai lầm kinh điển nhất.
❌ 2. Sai hostname
Nhiều hosting không dùng đơn giản là localhost.
❌ 3. Sai database username
❌ 4. Sai password
❌ 5. Sai database name
Trên hosting, tên database thường có prefix.
Ví dụ:
if0_12345678_mydb
❌ 6. Chưa tạo database
❌ 7. File config.php chưa upload hoặc chưa cập nhật
Cách lấy đúng thông tin database
Trên InfinityFree:
- Đăng nhập dashboard.
- Vào MySQL Databases.
-
Xem:
- DB Host Name
- Database Name
- Username
- Password
File config.php mẫu
<?php
$conn = mysqli_connect(
"sql123.infinityfree.com",
"if0_12345678",
"your_password",
"if0_12345678_mydb"
);
if (!$conn) {
die("Kết nối thất bại: " . mysqli_connect_error());
}
?>
Cách debug nhanh
Bước 1: Hiển thị lỗi kết nối
if (!$conn) {
die(mysqli_connect_error());
}
Bước 2: In thông tin (cẩn thận với production)
echo "Host: $host<br>";
echo "Database: $dbname<br>";
Bước 3: Copy thông tin từ dashboard, không gõ tay
Ví dụ “không muốn nghe”
Bạn debug suốt buổi tối.
Cuối cùng phát hiện:
$dbname = "mydb";
Trong khi tên thật là:
$dbname = "if0_12345678_mydb";
👉 Thiếu phần prefix.
👉 Mất 3 tiếng chỉ vì vài ký tự 🤡
Một ví dụ khác
Bạn copy password bằng chuột.
Vô tình dính thêm một dấu cách ở cuối.
Nhìn bằng mắt hoàn toàn không phát hiện được.
Checklist “cứ theo là ra”
Khi không kết nối được database sau khi upload host:
- Kiểm tra hostname.
- Kiểm tra username.
- Kiểm tra password.
- Kiểm tra database name.
- Kiểm tra prefix database.
- Kiểm tra database đã được tạo chưa.
-
Hiển thị
mysqli_connect_error().
Một sự thật ...“mất lòng”
95% trường hợp lỗi này không phải vì PHP hay MySQL “dở chứng”.
👉 Chỉ đơn giản là thông tin đăng nhập không chính xác.
Tổng kết
Nếu website chạy tốt trên localhost nhưng lỗi sau khi upload host, nguyên nhân gần như luôn là:
- sai cấu hình database.
👉 Hãy nhớ:
Mỗi hosting là một “căn nhà mới”, cần đúng chìa khóa mới vào được 😅
❓ FAQ nhanh
Có thể dùng root trên hosting không?
→ Hầu như không.
Hostname có luôn là localhost không?
→ Không.
Tên database có thể khác trên hosting không?
→ Thường sẽ có prefix.