PHP vẫn luôn là một trong những ngôn ngữ backend phổ biến nhất trên thế giới. Tuy nhiên, nhiều lập trình viên – kể cả người có kinh nghiệm – vẫn thường mắc phải những sai lầm “chết người” khiến ứng dụng kém bảo mật, khó bảo trì và khó mở rộng.

Trong bài viết này, chúng ta sẽ cùng điểm qua 11 sai lầm nghiêm trọng mà PHP developer hay mắc phải và quan trọng hơn là cách tránh chúng, kèm ví dụ cụ thể.

1. Không lọc và kiểm tra dữ liệu đầu vào

Sai lầm phổ biến:

php
$username = $_GET['user'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($conn, $query);

→ Dễ dính SQL Injection khi người dùng nhập ' OR '1'='1.

Cách tránh: Luôn sử dụng Prepared Statements.

php
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $_GET['user']]);

2. Vẫn dùng mysql_* functions đã bị loại bỏ

php
$result = mysql_query("SELECT * FROM users"); // Sai

Cách đúng:

php
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "");
$result = $pdo->query("SELECT * FROM users");

3. Không bật error_reporting trong môi trường dev

Sai lầm: Không thấy lỗi → khó debug.

Cách đúng:

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

Trong production: log ra file thay vì in ra màn hình.

4. Quản lý session kém an toàn

Sai lầm:

php
session_start();
// không regenerate session ID sau khi login

→ Dễ bị Session Fixation.

Cách đúng:

php
session_start();
session_regenerate_id(true);

5. Lạm dụng include/require không kiểm soát

Sai lầm:

php
$page = $_GET['page'];
include($page . ".php"); // Nguy hiểm

→ Có thể bị Local File Inclusion (LFI).

Cách đúng:

php
$allowed = ['home', 'about', 'contact'];
if (in_array($page, $allowed)) {
    include($page . ".php");
}

6. Không xử lý lỗi đúng cách

Sai lầm:

php
$result = $pdo->query("INVALID SQL"); // crash toàn bộ

Cách đúng:

php
try {
    $pdo->query("INVALID SQL");
} catch (PDOException $e) {
    error_log($e->getMessage());
    echo "Something went wrong!";
}

7. Kết hợp logic và HTML (Code Spaghetti)

Sai lầm:

php
<?php
$result = $pdo->query("SELECT * FROM posts");
while ($row = $result->fetch()) {
    echo "<h2>{$row['title']}</h2>";
    echo "<p>{$row['content']}</p>";
}

→ Khó bảo trì, test và mở rộng.

Cách đúng: Tách logic và view (MVC pattern, Blade, Twig…).

php
// Controller
$posts = $postRepository->getAll();
include 'views/posts.php';
php
<!-- views/posts.php -->
<?php foreach ($posts as $p): ?>
  <h2><?= htmlspecialchars($p['title']) ?></h2>
  <p><?= htmlspecialchars($p['content']) ?></p>
<?php endforeach; ?>

8. Không sử dụng Framework PHP hiện đại

Sai lầm: Code tay tất cả mọi thứ → dễ lặp lại, thiếu bảo mật.

Cách tránh: Dùng framework như Laravel, Symfony hoặc Slim để có:

  • Routing chuẩn
  • ORM bảo mật
  • Middleware tiện lợi
  • Dependency Injection

Ví dụ với Laravel:

php
Route::get('/users/{id}', [UserController::class, 'show']);

9. Không sử dụng hệ thống kiểm soát phiên bản (Git)

Sai lầm: Upload file bằng FTP, copy-paste thủ công → dễ mất code.

Cách tránh: Dùng Git.

shell
git init
git add .
git commit -m "Initial commit"

Sử dụng GitHub/GitLab để quản lý nhóm.

10. Không theo kịp các bản cập nhật PHP

Sai lầm: Vẫn dùng PHP 5.x hoặc 7.x.

→ Thiếu tính năng mới, dễ gặp lỗi bảo mật.

Cách tránh: Theo dõi php.net/releases và nâng cấp.

Ví dụ:

  • PHP 8.1: enum
  • PHP 8.2: readonly classes
  • PHP 8.3: json_validate()
  • PHP 8.5: pipe operator, array_first(), stack trace cho fatal errors

11. Không tuân thủ Coding Standards

Sai lầm: Mỗi dev viết một kiểu → code loạn.

Cách tránh: Tuân thủ PSR-12 và dùng công cụ tự động:

shell
composer require --dev squizlabs/php_codesniffer
./vendor/bin/phpcs --standard=PSR12 app/

Kết luận

Tránh được 11 sai lầm trên sẽ giúp bạn:

  • 🔒 Code an toàn hơn (chống SQL Injection, bảo mật session).
  • 🛠 Dễ bảo trì và mở rộng (tách logic/view, dùng framework).
  • 👥 Làm việc nhóm hiệu quả (Git, coding standards).
  • 🚀 Luôn cập nhật công nghệ mới (PHP 8.5 và hơn nữa).

👉 Nhớ rằng: Viết code PHP tốt không chỉ chạy được, mà còn phải an toàn, hiện đại và dễ bảo trì lâu dài.