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 "mò mẫm" tìm hiểu:
- MySQL
- SQL Injection
- Prepared Statement
Chưa kịp "ngộ ra cái gì" thì bắt đầu gặp hai cái tên:
- mysqli
- PDO
Google:
mysqli vs PDO
Kết quả:
- 50 bài viết.
- 100 ý kiến.
- 200 cuộc tranh luận.
Người mới học rất chi là "théc méc":
"Rốt cuộc 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 Improved
Ví 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 Objects
PDO 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ụ thực tế
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ụng
mysqli và PDO cũng tương tự.
Những thứ 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(...);
Lính 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 Hosting
gầ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ợ:
MySQL
Mà còn:
- PostgreSQL
- SQLite
- Oracle
- SQL Server
Nế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 phổ biến
Lính mới nghĩ:
PDO an toàn hơn mysqli
Không đúng.
Nếu đều dùng:
Prepared Statement
thì cả hai đều rất an toàn.
Một hiểu lầm khác
Lính mới nghĩ:
mysqli lỗi thời rồi
Không hề.
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.
Tập tành làm web
Nếu bạn đang tập tành thử nghiệm miễn phí PHP trên:
InfinityFree
Thì thực tế:
mysqli
thườ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 lính 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 InfinityFree
Thì có lẽ nê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ớn
PDO 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
- PDO
gần như không đáng kể.
Thứ quyết định tốc độ thường là:
- SQL
- Index
- Database design
chứ không phải thư viện kết nối.
Debug kiểu dev "xịn sò"
1. Chọn một bên
Đừng học theo kiểu:
- 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?
Cho đến lúc này thì 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
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?
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ó.