Câu chuyện của...ngư phủ! Chèo thuyền đi...câu cá! Bạn viết câu SQL:
SELECT * FROM users WHERE username = 'admin';
Bạn chạy query.
Không báo lỗi.
Không crash.
Không có warning.
Mọi thứ trông có vẻ rất bình thường.
Nhưng kết quả trả về:
… trống trơn 🤡
Bạn nhìn màn hình.
Màn hình nhìn lại bạn.
Hai "đứa" nhìn nhau, im lặng trong vài giây.
“Ủa? Query chạy mà dữ liệu đâu???”
👉 Chúc mừng, bạn vừa gặp một trong những tình huống “khó chịu nhưng rất phổ biến” khi làm việc với database.
Query chạy thành công, nhưng không có dữ liệu.
Query chạy nhưng không có dữ liệu thường do:
- bảng không có dữ liệu
-
điều kiện
WHEREkhông khớp - dữ liệu khác chữ hoa/chữ thường
- có khoảng trắng thừa
- đang kết nối nhầm database
Câu chuyện ngoài đời thật
Bạn ra hồ câu cá.
- cần câu tốt
- mồi ngon
- kỹ thuật chuẩn
Sáng tinh mơ hớn hở vác "đồ xịn" ra khỏi nhà! Bạn thả câu cả buổi.
…
Không được con nào. Ngao ngán, chán chường!
Điều đó không có nghĩa cần câu bị hỏng.
👉 Chỉ đơn giản là:
- chỗ đó không có cá
- hoặc cá không thích loại mồi bạn dùng 😅
👉 SQL cũng vậy.
Query vẫn chạy.
Nhưng điều kiện bạn đưa ra không “bắt được” dòng nào.
Ví dụ code
$sql = "SELECT * FROM users WHERE username = 'admin'";
$result = mysqli_query($conn, $sql);
Query chạy thành công.
Nhưng:
mysqli_num_rows($result);
trả về:
0
👉 Nghĩa là không có bản ghi nào phù hợp.
Cách kiểm tra
if (mysqli_num_rows($result) > 0) {
echo "Có dữ liệu";
} else {
echo "Không tìm thấy dữ liệu 😅";
}
8 nguyên nhân phổ biến nhất
❌ 1. Bảng hoàn toàn trống
Đôi khi nguyên nhân đơn giản đến mức… hơi quê 🤡
Bạn chưa insert dữ liệu nào cả.
❌ 2. Điều kiện WHERE không khớp
SELECT * FROM users WHERE username = 'admin'
Trong database thực tế lại là:
Admin
👉 admin khác Admin. Chỉ "màu mè" thay a bằng A cho nó...sang, vậy là dính lỗi!
❌ 3. Có khoảng trắng thừa
Trong database:
admin
Người dùng nhập:
admin
(có thêm một khoảng trắng ở cuối)
👉 Nhìn giống nhau nhưng SQL thấy khác hoàn toàn.
Fix:
$username = trim($_POST['username']);
❌ 4. Đang kết nối nhầm database
Bạn tưởng đang dùng database my_app.
Nhưng code thực tế lại kết nối tới test_db.
👉 Query chạy tốt.
👉 Chỉ là bạn đang tìm ở… sai nhà 😅
❌ 5. Sai tên cột
WHERE user_name = 'admin'
Trong bảng lại là:
username
❌ 6. Dữ liệu không đúng như bạn nghĩ
Ví dụ email trong database là:
admin@gmail.com
Nhưng bạn query:
Admin@gmail.com
Lời khuyên là nên tạo cho mình một "phong cách" riêng. Viết toàn chữ thường thay vì lúc HOA, lúc thường.
❌ 7. Query không lỗi nhưng result = 0 rows
Điều này hoàn toàn bình thường.
Không phải lỗi.
Chỉ là không có dòng nào phù hợp.
❌ 8. Biến PHP rỗng
$username = $_POST['username'];
Nếu biến rỗng:
WHERE username = ''
👉 Query chạy nhưng gần như chắc chắn không trả về dữ liệu.
Cách debug từng bước
Bước 1: In biến
var_dump($username);
Bước 2: In câu SQL
echo $sql;
Bước 3: Chạy SQL trong phpMyAdmin
Copy câu SQL và chạy trực tiếp.
Nếu vẫn không có dữ liệu → vấn đề nằm ở dữ liệu hoặc điều kiện.
Bước 4: Kiểm tra số dòng
echo mysqli_num_rows($result);
Ví dụ thực tế
$username = trim($_POST['username']);
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
echo "Tìm thấy user 😎";
} else {
echo "Không tìm thấy user 😅";
}
Ví dụ “nghe...trớt quớt”
Bạn debug gần 2 tiếng.
Cuối cùng phát hiện:
$username = "admin ";
Có thêm đúng 1 dấu cách ở cuối.
👉 Chỉ một khoảng trắng bé xíu.
👉 Nhưng đủ làm bạn mất cả buổi tối 🤡
Checklist “cứ theo là ra”
Khi query không có dữ liệu:
- Bảng có dữ liệu chưa?
-
var_dump()biến đầu vào. -
Dùng
trim(). - In câu SQL.
- Chạy SQL trong phpMyAdmin.
- Kiểm tra đúng database chưa.
-
Kiểm tra
mysqli_num_rows().
Một sự thật hơi “đắng”
Rất nhiều lần, query hoàn toàn đúng.
Database cũng hoàn toàn bình thường.
👉 Sai duy nhất là:
- một khoảng trắng,
- một chữ hoa,
- hoặc một biến rỗng 😅
Tổng kết
Query chạy nhưng không có dữ liệu không có nghĩa là MySQL bị lỗi.
👉 Nó chỉ có nghĩa:
Không có bản ghi nào thỏa mãn điều kiện của bạn.
👉 Cách xử lý tốt nhất:
- kiểm tra dữ liệu đầu vào
- in câu SQL
- chạy thử trong phpMyAdmin
❓ FAQ nhanh
Query không lỗi nhưng không có dữ liệu có bình thường không?
→ Hoàn toàn bình thường.
Làm sao biết có bao nhiêu dòng?
mysqli_num_rows($result);
Có nên dùng trim() không?
→ Rất nên.
👉 Bạn có thể cũng đang gặp
- MySQL INSERT không chạy
- Duplicate entry
- SQL syntax error
- Database không connect sau khi upload host
Không có nhận xét nào:
Đăng nhận xét