Khi bắt đầu làm một website có tính năng động, gần như lúc nào bạn cũng sẽ phải đụng đến PHP và MySQL. Đây là phần lập trình xử lý logic và phần lưu trữ dữ liệu. Bài viết này tổng hợp top 7 câu hỏi thường gặp về PHP và MySQL mà người mới hay hỏi nhất.
PHP là phần xử lý logic chạy trên máy chủ. MySQL là nơi lưu trữ dữ liệu dưới dạng các bảng có liên kết với nhau. Chức năng đăng nhập, giỏ hàng, danh sách bài viết hay sản phẩm phần lớn là kết quả của việc hai thành phần này phối hợp.
Chúng tôi nhận thấy người mới thường hỏi gần như cùng một nhóm câu hỏi. Dưới đây là phần giải đáp cụ thể. Nếu bạn đang tự học, làm đồ án, hoặc là chủ shop nhỏ đang tự dựng website, phần này sẽ giúp bạn có nền tảng vững hơn.
PHP và MySQL khác nhau thế nào, có cần học cả hai không?
PHP là ngôn ngữ lập trình, dùng để viết các quyết định trong chương trình. Ví dụ: kiểm tra mật khẩu có đúng hay không, tính tổng tiền giỏ hàng, hay quyết định hiển thị nội dung nào cho người truy cập.
MySQL là hệ quản trị cơ sở dữ liệu, chuyên giữ dữ liệu và trả về đúng thứ bạn yêu cầu. Nếu chỉ làm trang giới thiệu tĩnh, ít thay đổi, bạn chưa cần MySQL. Khi có người đăng nhập hoặc bài viết cần thêm, sửa, xóa, bạn cần chỗ lưu dữ liệu đó. Với phần lớn dự án, học cả hai là cần thiết.
Nên chọn phiên bản PHP nào cho dự án hiện tại?
Tiêu chí quan trọng nhất là phiên bản đó còn được nhà phát triển vá lỗi bảo mật hay không. Khi phiên bản ngừng hỗ trợ, lỗ hổng mới sẽ không còn bản sửa chính thức. Tiêu chí thứ hai là thư viện bạn định dùng có tương thích với phiên bản đó không.
Danh sách phiên bản được hỗ trợ thay đổi theo thời gian, nên hãy kiểm tra trên trang chính thức của PHP trước khi quyết định. Đừng chỉ tin một bài viết cũ, kể cả bài này chỉ là điểm khởi đầu để bạn đối chiếu.
Đừng quên kiểm tra hosting. Một số gói giá rẻ chỉ hỗ trợ phiên bản khá thấp. Kiểm tra trước khi cài đặt sẽ tránh phiền phức khi nâng cấp về sau.
Kết nối PHP với MySQL sao cho an toàn?
Có hai cách kết nối phổ biến: PDO và MySQLi. PDO làm việc được với nhiều loại cơ sở dữ liệu, còn MySQLi chỉ dành cho MySQL. Với người mới, chúng tôi thường gợi ý PDO vì kiến thức này dễ mang sang dự án khác.
Quan trọng hơn cả là không ghép trực tiếp dữ liệu người dùng nhập vào câu lệnh SQL. Hãy dùng câu lệnh chuẩn bị sẵn (prepared statement) để tách lệnh khỏi dữ liệu. Thông tin kết nối như tên đăng nhập và mật khẩu cơ sở dữ liệu nên đặt trong tệp cấu hình nằm ngoài thư mục công khai.
Vì sao SQL Injection nguy hiểm và phòng tránh ra sao?
SQL Injection là kiểu tấn công mà kẻ xấu nhập mã SQL vào các ô nhập liệu như ô tìm kiếm hoặc form đăng nhập. Nếu chương trình ghép thẳng chuỗi đó vào truy vấn mà không kiểm tra, dữ liệu có thể bị đọc, sửa hoặc xóa.
Cách xử lý cốt lõi là dùng prepared statement và kiểm tra kiểu dữ liệu đầu vào. Ô nhập số lượng chỉ nhận số, còn ô email cần kiểm tra đúng định dạng. Bên cạnh đó, tài khoản kết nối cơ sở dữ liệu chỉ nên có những quyền thật sự cần thiết.
Thiết kế bảng MySQL cho shop nhỏ thế nào cho gọn?
Với shop nhỏ, bạn nên tách riêng bảng người dùng, bảng sản phẩm và bảng đơn hàng. Các bảng liên kết với nhau qua khóa ngoại, ví dụ mỗi đơn hàng trỏ về đúng một người mua. Cách này giúp tránh lặp thông tin và giúp việc sửa đổi chỉ cần làm ở một chỗ.
Đừng chuẩn hóa quá mức khi quy mô còn nhỏ. Thiết kế quá phức tạp sẽ làm việc viết truy vấn khó hơn. Chuẩn hóa vừa phải là đủ, và khi cửa hàng mở rộng bạn có thể điều chỉnh tiếp.
Website chậm vì truy vấn MySQL, nên xử lý từ đâu?
Điều đầu tiên là đừng đoán mò. Hãy bật slow query log để ghi lại các truy vấn chạy chậm, rồi xem xét từng câu. Thường thì thêm chỉ mục (index) cho các cột xuất hiện trong mệnh đề WHERE hoặc JOIN sẽ giúp cải thiện.
Một lỗi phổ biến là dùng SELECT * khi chỉ cần vài cột. Chỉ chọn đúng cột cần thiết cũng góp phần cải thiện tốc độ. Hãy đo lại sau mỗi lần chỉnh sửa để biết hiệu quả thực tế, vì kết quả phụ thuộc vào lượng dữ liệu và cấu hình máy chủ.
So sánh PDO, MySQLi và mysql_ cho người mới
Khi tìm tài liệu cũ, bạn sẽ gặp cả ba cách này. Dưới đây là tóm tắt nhanh:
- mysql_: cách cũ, đã ngừng sử dụng và không hỗ trợ prepared statement. Không nên dùng cho dự án mới.
- MySQLi: hỗ trợ prepared statement, phù hợp khi dự án chỉ dùng MySQL.
- PDO: hỗ trợ prepared statement tốt và dùng được với nhiều hệ quản trị, thường là lựa chọn dễ mang theo kiến thức nhất cho người mới.
Quan trọng hơn là chọn một cách, dùng đúng và giữ nhất quán trong toàn bộ dự án.
Câu hỏi thường gặp
PHP và MySQL có miễn phí cho dự án thương mại không?
Cả hai đều là mã nguồn mở, bạn có thể dùng cho dự án kinh doanh. Tuy nhiên, công cụ đi kèm hoặc dịch vụ hosting có thể tính phí, nên hãy đọc kỹ giấy phép từng thành phần.
Hosting giá rẻ có chạy tốt PHP và MySQL không?
Đa số hosting phổ thông đều hỗ trợ PHP và MySQL. Cần để ý phiên bản PHP và giới hạn tài nguyên. Với website nhỏ thường đủ dùng, khi lượng truy cập tăng bạn sẽ cần nâng cấp gói.
Nên học MySQL trước hay PHP trước?
Người hoàn toàn mới nên học PHP căn bản trước để thấy dữ liệu được lấy ra và hiển thị như thế nào, từ đó hiểu MySQL nhanh hơn.
Nếu chưa biết bắt đầu từ đâu, hãy chọn bài toán nhỏ như trang đăng nhập hoặc danh sách sản phẩm rồi tự làm thử. Để làm quen công cụ quản trị, bạn có thể đọc tổng quan về hệ quản trị cơ sở dữ liệu MySQL và MySQL Workbench là gì và vì sao nên cài đặt. Nếu cần đơn vị tư vấn để dựng website đúng chuẩn, bạn có thể tham khảo dotnetguru.org.
