Thứ Hai, 1 tháng 6, 2026

Hướng dẫn Debug PHP từ A-Z cho người mới: Đừng đoán lỗi, hãy tìm ra nó!

Một trong những sai lầm lớn nhất của người mới học lập trình là:

Thấy code lỗi.

Không biết lỗi ở đâu.

Bắt đầu sửa lung tung.

Xóa một dòng.

Thêm một dòng.

Đổi tên biến.

Đổi tên file.

Đổi cả database.

Đổi luôn trình duyệt.

Cuối cùng...

Lỗi vẫn còn nguyên.

Nếu bạn từng trải qua chuyện này thì xin chúc mừng.

Bạn đang hành xử giống hệt 99% lập trình viên mới vào nghề.


Debug là gì?

Nói đơn giản:

Debug là quá trình tìm ra nguyên nhân thực sự khiến chương trình hoạt động không như mong muốn.

Không phải:

Đoán lỗi.

Không phải:

Cầu nguyện.

Không phải:

Chạy đi hỏi ChatGPT trước khi tự kiểm tra.

Mà là:

Tìm bằng chứng.


Sai lầm phổ biến nhất của người mới

Giả sử:

$result = mysqli_query($conn, $sql);

Dữ liệu không được lưu.

Người mới thường nghĩ:

Chắc MySQL bị lỗi.

Rồi bắt đầu:

  • cài lại XAMPP
  • tạo database mới
  • đổi trình duyệt

Trong khi nguyên nhân thật sự chỉ là:

$email = "";

rỗng.


Nguyên tắc vàng số 1

Đừng đoán

Hãy kiểm tra.

Lập trình không phải bói toán.


Công cụ debug số 1: echo

Nghe đơn giản.

Nhưng cực kỳ hiệu quả.

Ví dụ:

echo $username;

Nếu không hiện gì.

Bạn đã biết vấn đề nằm gần đó.


Ví dụ đời thường

Bạn gọi điện cho bạn mình.

Không nghe tiếng.

Bạn sẽ làm gì?

  • Kiểm tra điện thoại.
  • Kiểm tra sóng.
  • Kiểm tra micro.

Chứ không ai lập tức mua điện thoại mới.

Debug cũng vậy.


Công cụ debug số 2: var_dump()

Người anh em đáng tin cậy của PHP.

Ví dụ:

var_dump($username);

Kết quả:

string(5) "admin"

hoặc:

NULL

Lúc này mọi thứ rõ ràng hơn rất nhiều.


Công cụ debug số 3: print_r()

Rất hữu ích với mảng.

Ví dụ:

print_r($_POST);

Kết quả:

Array
(
    [username] => admin
    [password] => 123456
)

Nếu mảng rỗng:

Array
(
)

thì bạn biết form chưa gửi dữ liệu.


Công cụ debug số 4: Hiển thị lỗi PHP

Khi học PHP trên host thật hoặc InfinityFree, nhiều khi lỗi bị ẩn hoàn toàn.

Trang chỉ trắng tinh.

Lúc đó hãy bật:

error_reporting(E_ALL);
ini_set('display_errors', 1);

Bỗng nhiên PHP sẽ "khai hết".


Kẻ thù số 1: Trang trắng (White Screen of Death)

Mọi lập trình viên PHP đều từng gặp.

Bạn mở trang.

Không lỗi.

Không cảnh báo.

Không nội dung.

Chỉ còn màu trắng tinh khiết.

Đẹp nhưng đáng sợ.


Nguyên nhân thường là:


Debug Form POST

Một lỗi kinh điển.

Bạn submit form.

PHP không nhận dữ liệu.


Đừng đoán.

Hãy kiểm tra:

print_r($_POST);

Nếu kết quả:

Array
(
)

thì vấn đề nằm ở form.


Debug Session

Bạn đăng nhập thành công.

Qua trang khác:

$_SESSION

biến mất.


Việc đầu tiên cần kiểm tra:

session_start();

đã có chưa?


Đừng cười.

Đây là một trong những lỗi phổ biến nhất thế giới PHP.


Debug Login

Người mới thường nghĩ:

Password sai.

Nhưng thực tế có thể là:

  • khoảng trắng
  • trim()
  • hash
  • session
  • database

Hãy in dữ liệu ra:

var_dump($username);
var_dump($password);

Bạn sẽ bất ngờ vì số lần phát hiện lỗi theo cách này.


Debug Database

Đừng viết:

mysqli_query($conn, $sql);

rồi hy vọng.


Hãy viết:

if(mysqli_query($conn, $sql))
{
    echo "Success";
}
else
{
    echo mysqli_error($conn);
}

PHP sẽ kể cho bạn nghe chính xác điều gì đang xảy ra.


Debug Upload Hosting

Đây là nơi nhiều người mất ngủ.

Code chạy trên localhost.

Upload host.

Chết.


Nguyên nhân phổ biến:

  • sai đường dẫn
  • sai database
  • sai quyền thư mục
  • host chặn mail()

Kinh nghiệm:

Nếu code chạy local nhưng chết trên host.

Đừng nhìn code trước.

Hãy kiểm tra môi trường.


Quy tắc 5 phút

Nếu sửa một lỗi quá 5 phút mà không có thêm bằng chứng mới.

Dừng lại.

Kiểm tra lại.

In dữ liệu ra.

Var_dump.

Print_r.

Đọc thông báo lỗi.


Đừng tiếp tục đoán.


Cách người mới debug

Code lỗi
↓
Đoán
↓
Sửa bừa
↓
Lỗi hơn
↓
Đoán tiếp

Cách lập trình viên có kinh nghiệm debug

Code lỗi
↓
Thu thập dữ liệu
↓
Tìm nguyên nhân
↓
Sửa đúng chỗ

Một bí mật thú vị

Lập trình viên giỏi không phải là người không bao giờ gặp lỗi.

Mà là người tìm ra lỗi nhanh hơn.

Thực tế:

Người viết 1000 dòng code sẽ gặp lỗi.

Người viết 10.000 dòng code cũng gặp lỗi.

Người viết 100.000 dòng code vẫn gặp lỗi.

Khác biệt nằm ở tốc độ tìm ra nguyên nhân.


Kết luận

Nếu chỉ nhớ một điều trong bài viết này, hãy nhớ:

Đừng đoán lỗi.

Hãy tìm bằng chứng.

PHP hiếm khi tự nhiên nổi giận.

Thông thường nó đã cố gắng nói cho chúng ta biết điều gì đó từ rất lâu rồi.

Vấn đề chỉ là chúng ta có chịu lắng nghe hay không.