Thứ Sáu, 15 tháng 5, 2026

Query chạy nhưng không có dữ liệu – cảm giác như đi câu cả ngày mà không được con cá nào

Một 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 ra điều "théc méc"...

Màn hình nhìn lại bạn, chi mà nhìn tui dzây??.


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 WHERE khô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 chuẩn bị ra hồ câu cá, mọi thứ "không chê vào đâ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 cụ thể

$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ê độ nếu phải nới ra với...toàn thế giới!

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è" một chút, 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 kiểu dev "xịn sò"

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 "chuẩn không cần chỉnh"

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...biết rồi, khổ lắm, nói mãi

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