Form vẫn luôn là đề tài được "ưu ái" mỗi khi chúng ta "tới công chuyện" với SQL! Bạn viết xong form đăng ký, hân hoan vui sướng với kỳ vọng to lớn sẽ nhận được nhiều "đơn xin làm đồng bọn".
Người dùng nhập:
- Họ tên
- Mật khẩu
Bấm nút Đăng ký.
Trang web hiện thông báo:
"Đăng ký thành công!" 🎉
Bạn vui mừng mở phpMyAdmin ra kiểm tra.
…
Không có dòng dữ liệu nào mới 🤡
Bạn đứng hình.
"Ủa? Thành công kiểu gì mà database trống trơn vậy???"
👉 Chúc mừng, bạn vừa gặp một trong những lỗi "ức chế" nhất khi học PHP + MySQL:
INSERT không chạy, mà cũng chẳng báo lỗi gì.
Màn hình thông báo "Thành công" nhưng tìm đỏ mắt cũng không thấy "Thành quả" đâu!?
MySQL INSERT không chạy nhưng không báo lỗi thường do:
- câu SQL sai
- dữ liệu từ form bị rỗng
- tên cột không đúng
- chưa submit form
- không kiểm tra lỗi bằng mysqli_error()
Ví dụ đời thường
Hãy tưởng tượng bạn viết một lá thư, bỏ vào phong bì và gửi bưu điện.
Một tuần sau người nhận gọi điện:
"Tôi không nhận được gì cả."
Bạn kiểm tra lại thì phát hiện:
- quên ghi địa chỉ
- quên dán tem
- hoặc… quên bỏ thư vào phong bì 😅
👉 SQL INSERT cũng tương tự.
Nó "không đến nơi" vì đâu đó có vấn đề.
Ví dụ code cơ bản
$sql = "INSERT INTO users (username, email)
VALUES ('$username', '$email')";
mysqli_query($conn, $sql);
echo "Đăng ký thành công!";
Bạn hãy nhìn kỹ lại code trên. Nhìn rất hợp lý.
Nhưng nếu query thất bại, bạn vẫn dùng lệnh echo để in:
"Đăng ký thành công!" 🤡
Sai lầm phổ biến nhất
❌ Không kiểm tra kết quả của mysqli_query()
mysqli_query($conn, $sql);
echo "Đăng ký thành công!";
👉 Đây là kiểu:
"Không cần biết có thành công hay không, cứ ăn mừng trước đã." 😅
Cách viết đúng
if (mysqli_query($conn, $sql)) {
echo "Đăng ký thành công";
} else {
echo "Lỗi: " . mysqli_error($conn);
}
👉 Đây là dòng code mà người mới học PHP nên thuộc nằm lòng.
7 nguyên nhân phổ biến nhất
❌ 1. Dữ liệu từ form bị rỗng
$username = $_POST['username'];
$email = $_POST['email'];
Nếu form không gửi dữ liệu đúng:
$username = ""
$email = ""
👉 INSERT có thể không chạy như bạn mong muốn.
Debug nhanh
var_dump($_POST);
❌ 2. Tên cột sai
INSERT INTO users (user_name, email)
Trong database thực tế có thể là:
username
👉 Chỉ khác một dấu gạch dưới là đủ gây lỗi 😅
❌ 3. Tên bảng sai
INSERT INTO user (...)
Trong database lại là:
users
❌ 4. Dữ liệu chứa dấu nháy đơn
Ví dụ username:
O'Brien
Câu SQL sẽ bị hỏng nếu không escape đúng cách.
❌ 5. Chưa kết nối database thành công
$conn = mysqli_connect(...);
Nếu kết nối thất bại mà không kiểm tra, query chắc chắn không chạy.
❌ 6. Chưa submit form
Bạn mở file PHP trực tiếp.
$_POST hoàn toàn rỗng.
❌ 7. Vi phạm ràng buộc dữ liệu
Ví dụ:
- email bị trùng (UNIQUE)
- cột không cho phép NULL
- dữ liệu vượt quá độ dài cho phép
Ví dụ thực tế với InfinityFree
Nếu bạn đang học PHP trên hosting miễn phí như InfinityFree
, quy trình thường là:
- Tạo database.
- Tạo bảng users.
- Kết nối bằng thông tin database được cung cấp.
- Chạy query INSERT.
Nếu không thấy dữ liệu, việc đầu tiên cần làm là:
echo mysqli_error($conn);
Code mẫu chuẩn
<?php
require "config.php";
$username = $_POST['username'];
$email = $_POST['email'];
$sql = "INSERT INTO users (username, email)
VALUES ('$username', '$email')";
if (mysqli_query($conn, $sql)) {
echo "Thêm dữ liệu thành công 😎";
} else {
echo "Lỗi: " . mysqli_error($conn);
}
?>
Cách debug từng bước
Bước 1: In dữ liệu nhận được
var_dump($_POST);
Bước 2: In câu SQL
echo $sql;
Bước 3: Chạy thử câu SQL trong phpMyAdmin
Copy câu SQL và chạy trực tiếp.
Nếu lỗi, phpMyAdmin sẽ báo rất rõ.
Bước 4: In lỗi MySQL
echo mysqli_error($conn);
Ví dụ "sự thật phũ phàng"
$username = $_POST['username'];
$email = $_POST['email'];
$sql = "INSERT INTO users (username, email)
VALUES ('$username', '$email')";
Sau 2 tiếng debug, bạn phát hiện:
$_POST['username'] = ""
👉 Người dùng quên nhập (bạn không bắt buộc người dùng nhập).
Hoặc…
👉 Trong form bạn đặt:
<input name="user_name">
Nhưng PHP lại đọc:
$_POST['username']
👉 Chỉ khác một dấu gạch dưới 🤡
Checklist :
Khi INSERT không chạy:
- var_dump($_POST);
- echo $sql;
- echo mysqli_error($conn);
- Chạy SQL trong phpMyAdmin.
- Kiểm tra tên bảng.
- Kiểm tra tên cột.
- Kiểm tra UNIQUE constraints.
Một sự thật hơi "đau cái lòng"
Khi mới học PHP, rất nhiều người viết:
mysqli_query($conn, $sql);
echo "Thành công";
👉 Kết quả:
- query thất bại
- dữ liệu không có
- nhưng màn hình vẫn báo thành công 🤡
Tổng kết
MySQL INSERT không chạy nhưng không báo lỗi thường do:
- bạn chưa kiểm tra kết quả của mysqli_query()
- dữ liệu đầu vào sai
- câu SQL sai
👉 Câu thần chú:
echo mysqli_error($conn);
👉 Nhiều khi chỉ một dòng này giúp bạn tiết kiệm hàng giờ debug 😅
❓ FAQ nhanh
Vì sao không báo lỗi?
→ Vì bạn không in lỗi ra.
Có nên dùng mysqli_error() không?
→ Có, đặc biệt khi học.
Cách debug nhanh nhất?
→ var_dump($_POST) + echo $sql + mysqli_error($conn).
👉 Bạn có thể cũng đang gặp
Query chạy nhưng không có dữ liệu
Duplicate entry
SQL syntax error
MySQL không connect được
Không có nhận xét nào:
Đăng nhận xét