Thế giới này luôn có những Nike-Adidas, Coca Cola-Pepsi...Những cuộc tranh luận không bao giờ dứt...
Bạn vừa học:- MySQL
- SQL Injection
- Prepared Statement
Và bắt đầu gặp hai cái tên:
mysqli
PDOGoogle:
mysqli vs PDOKết quả:
💀
50 bài viết.
100 ý kiến.
200 cuộc tranh luận.
Người mới học rất "théc méc":
"Rốt cuộc em nên dùng cái nào?"
😵
mysqli là gì?
mysqli là thư viện PHP dùng để kết nối MySQL.
Tên đầy đủ:
MySQL ImprovedVí dụ:
$conn = mysqli_connect(
$host,
$user,
$pass,
$db
);Rất phổ biến.
Rất nhiều tutorial PHP cũ sử dụng.
PDO là gì?
PDO viết tắt:
PHP Data ObjectsPDO cũng dùng để kết nối database.
Ví dụ:
$pdo = new PDO(
"mysql:host=localhost;dbname=test",
$user,
$pass
);PDO hiện đại hơn một chút.
Được nhiều framework yêu thích.
Ví dụ đời thường 🍜
Hãy tưởng tượng:
Bạn muốn đi từ Đà Nẵng vào Sài Gòn.
Có hai lựa chọn:
🚗 Xe hơi
🚄 Tàu hỏa
Cả hai đều tới nơi.
😎
Khác nhau ở:
Tính năng
Sự tiện lợi
Cách sử dụngmysqli và PDO cũng tương tự.
Điều giống nhau 😎
Cả hai đều có thể:
✅ Kết nối MySQL
✅ SELECT
✅ INSERT
✅ UPDATE
✅ DELETE
✅ Prepared Statement
✅ Chống SQL Injection
Nghĩa là:
Làm website bình thường đều ổn😎
Team mysqli nói gì? 😄
Họ thường bảo:
mysqli đơn giản hơn.
Ví dụ:
$conn = mysqli_connect(...);Người mới nhìn vào thường dễ hiểu hơn.
Và Internet có rất nhiều ví dụ.
Đặc biệt:
Hosting giá rẻ
InfinityFree
Shared Hostinggần như đều hỗ trợ tốt.
Team PDO nói gì? 😎
Họ thường bảo:
PDO linh hoạt hơn.
PDO không chỉ hỗ trợ:
MySQLMà còn:
PostgreSQL
SQLite
Oracle
SQL ServerNếu đổi database sau này.
PDO đỡ vất vả hơn.
Ví dụ thực tế 😄
mysqli:
$conn =
mysqli_connect(
"localhost",
"root",
"",
"test"
);PDO:
$pdo =
new PDO(
"mysql:host=localhost;dbname=test",
"root",
""
);Cả hai đều hoạt động.
😎
Prepared Statement bên nào dễ hơn?
Đây là nơi PDO ghi điểm khá mạnh.
mysqli:
$stmt =
mysqli_prepare(
$conn,
"SELECT *
FROM users
WHERE id=?"
);PDO:
$stmt =
$pdo->prepare(
"SELECT *
FROM users
WHERE id=?"
);Nhiều người thấy PDO gọn hơn.
😄
Một hiểu lầm rất phổ biến 🤡
Người mới nghĩ:
PDO an toàn hơn mysqliKhông đúng.
Nếu đều dùng:
Prepared Statementthì cả hai đều rất an toàn.
😎
Một hiểu lầm khác 🤡
Người mới nghĩ:
mysqli lỗi thời rồiKhông.
Rất nhiều website đang chạy tốt với mysqli.
Thậm chí nhiều dự án PHP nhỏ và vừa vẫn dùng mysqli hàng ngày.
InfinityFree Case 😅
Nếu bạn đang học PHP trên:
InfinityFreeThì thực tế:
mysqlithường dễ gặp hơn.
Vì:
- Nhiều tutorial dùng mysqli
- Nhiều ví dụ trên mạng dùng mysqli
- Người mới dễ copy và chạy
Không có gì sai cả.
😄
Vậy người mới nên chọn gì?
Đây là câu hỏi quan trọng nhất.
Nếu bạn đang:
Mới học PHP
Làm website đầu tiên
Dùng InfinityFreeMình thường khuyên:
👉 Học mysqli trước.
Lý do:
- Đơn giản
- Dễ hiểu
- Ví dụ nhiều
- Debug dễ
Sau đó học PDO.
Con đường này ít đau đầu hơn.
😄
Còn nếu muốn đi xa hơn?
Ví dụ:
Laravel
Framework
Dự án lớnPDO là kiến thức rất đáng học.
Vì khá nhiều framework hiện đại xây dựng dựa trên tư duy tương tự.
Sự thật biết rồi khổ lắm nói mãi 😎
Trong rất nhiều dự án thực tế.
Hiệu năng khác biệt giữa:
mysqli
PDOgần như không đáng kể.
Thứ quyết định tốc độ thường là:
SQL
Index
Database designchứ không phải thư viện kết nối.
😄
Debug kiểu dev thật 😎
✅ 1. Chọn một bên
Đừng học:
Sáng mysqli
Chiều PDO
Tối xem YouTube tranh luận🤡
✅ 2. Học Prepared Statement
Quan trọng hơn nhiều so với việc chọn mysqli hay PDO.
✅ 3. Học SQL cho chắc
Một câu SQL tốt thường giá trị hơn việc đổi thư viện.
Checklist chuẩn không cần chỉnh 😎
☑ mysqli vẫn tốt
☑ PDO vẫn tốt
☑ Cả hai đều hỗ trợ Prepared Statement
☑ Cả hai đều chống SQL Injection
☑ Người mới có thể bắt đầu bằng mysqli
☑ Đừng biến việc chọn thư viện thành chiến tranh tôn giáo 😄
FAQ nhanh
mysqli có lỗi thời không?
→ Không.
PDO có nhanh hơn không?
→ Khác biệt thường rất nhỏ.
PDO có chống SQL Injection tốt hơn?
→ Không.
Prepared Statement mới là yếu tố chính.
InfinityFree dùng mysqli được không?
→ Hoàn toàn được 😎
Bạn có thể cũng đang gặp 😭
👉 SQL Injection là gì?
👉 Vì sao nên dùng Prepared Statement?
👉 AUTO_INCREMENT hoạt động ra sao?
👉 Vì sao xóa dữ liệu rồi ID vẫn tăng?
👉 JOIN là gì?
👉 Backup database đúng cách
Tổng kết
Nếu mysqli và PDO là hai chiếc xe.
Thì:
mysqli = xe số
PDO = xe tự động😄
Cả hai đều đưa bạn tới đích.
Điều quan trọng hơn là:
👉 Biết lái xe.
👉 Đi đúng đường.
👉 Đừng đâm vào SQL Injection.
😆
Vì trong thực tế:
Website chậm hiếm khi do mysqli.
Website bị hack hiếm khi do PDO.
Nhưng website "toang" vì code sai thì ngày nào cũng có. 🤡