Hướng dẩn kết nối PHP với MySQL Database

Bài hướng dẫn này sẽ rất hữu dụng nếu bạn mới bắt đầu học về lập trình website

Giới thiệu

Bài hướng dẫn này sẽ rất hữu dụng nếu bạn mới bắt đầu học về lập trình website. Chúng tôi sẽ chỉ bạn cách làm thế nào để kết nối PHP với MySQL database. Nếu bạn làm web, chắc chắn bạn cần quản lý, điều chỉnh, hiển thị, hoặc xóa bảng trong cơ sở dữ liệu.

Bạn cần chuẩn bị gì?

Trước khi bắt đầu bạn cần chuẩn bị:

  • Truy cập vào tài khoản hosting control panel

Bước 1 — Tạo MySQL Database

Bước này cần thiết trong trường hợp nếu bạn chưa có MySQL database. Tại Hostinger, MySQL database có thể được tạo dễ dàng trong phần MySQL Databases. Nếu cần, bạn có thể đọc thêm hướng dẫn tạo MySQL database trên cPanel(tiếng Anh).Hostinger Control Panel MySQL Databases Section

Khi bạn đã vào trong phần MySQL Databases, nhập thông tin và nhấn nút Create.Tạo cơ sở dữ liệu trong mysql database

QUAN TRỌNG: Lưu lại thông tin bạn vừa điền. Bạn cần nó để kết nối cơ sở dữ liệu trong php ở bước tiếp theo.

 

Bước 2 — Viết code để kết nối PHP với MySQL database

Bạn đang muốn kết nối cơ sở dữ liệu trong php tức là ở website cần có một PHP code để thực thi việc này. Ở ví dụ này, database có thể u266072517_name và user database liên quan là  u266072517_user. Bạn cũng cần biết mật khẩu, trong trường hợp này mật khẩu chúng tôi đặt ở Bước 1 là buystuffpwd.

Bạn cũng cần phải điền đúng servername hoặc hostname. Ở Hostinger, MySQL hostname cũng đặt trong mục MySQL Databases. Trong ví dụ này, hostname sẽ là: mysql.hostinger.com.

Ở trường hợp khi bạn muốn kết nối mysql với php tại máy local (script lấy database của website đặt cùng server với database), bạn có thể dùng tên gọi localhost để đặt cho hostname. Nếu không đúng, hoặc nếu bạn đang kết nối php với mysql database từ xa (script kết nối và cơ sở dữ liệu không nằm trong cùng một server), bạn có thể phải sử dụng địa chỉ IP address của database server hoặc hostname của database. Để biết thêm thông tin chi tiết, hãy liên hệ nhà cung cấp hosting của bạn để được cung cấp đúng thông tin về hostname.


Hiện tại có 2 phương thức để kết nối tới cơ sở dữ liệu MySQL là MySQLi và PDO. Một thay đổi quan trọng là cả 2 phương pháp đều đã hỗ trợ ‘prepared statements’, giúp tăng cường khả năng chống SQL injection khi kết nối mysql với php để chỉnh sửa thông tin. Function cũ ‘mysql_’ đã bị deprecated (lỗi thời) và không còn được dùng và phát triển nữa, vì nó hoàn toàn không an toàn.

 

MySQLi viết tắt của MySQL Improved, nó thêm tính năng trong giao diện của MySQL. PDO viết tắt của cụm PHP Data Object. Khác biệt chính giữa PDO và MySQLi là  PDO hỗ trợ nhiều loại database khác nhau (MySQL, MS SQL, Postgre DB) trong cùng một scrip, bạn chỉ cần viết các hàm liên quan đến dữ liệu một lần. PDO là ‘object oriented’ (hướng đối tượng), kết nối giữa website và database được tạo bởi các biến đối tượng. Ví dụ khi tạo một object:

  1. $my_Object = new OBJECT();

MySQLi

Sau đây là ví dụ cơ bản cách lấy database của website qua một PHP code đơn giản:

  1. ?php
  2. $servername = "mysql.hostinger.com";
  3. $database = "u266072517_name";
  4. $username = "u266072517_user";
  5. $password = "buystuffpwd";
  6.  
  7. // Create connection
  8.  
  9. $conn = mysqli_connect($servername, $username, $password, $database);
  10.  
  11. // Check connection
  12.  
  13. if (!$conn) {
  14.  
  15. die("Connection failed: " . mysqli_connect_error());
  16.  
  17. }
  18. echo "Connected successfully";
  19. mysqli_close($conn);
  20. ?

Phương pháp chính của script này là hàm mysqli_connect(). Đây là hàm PHP, bạn có thể tìm hiểu thêm tại đây.

Ở đầu code, chúng ta thấy có các biến khai báo và giá trị được cấp cho chúng. Thông thường, chúng ta cần bốn biến để thiết lập kết nối cơ sở dữ liệu trong php code: $servername, $database, $username và $password. Trong code này, chúng tôi đã đặt thông tin database chính xác cho những biến này, để sau này khi dùng hàm mysqli_connect() chúng tôi có thể dùng biến này để đưa cho hàm này.

Tiếp theo hàm mysqli_connect() sẽ thử thiết lập kết nối tới tới database bằng thông tin đã được cấp trong code, phần tiếp theo là code sẽ thực thi nếu hàm mysqli_connect() thực hiện thành công. Như bạn thấy, sau khi kết nối thành công, nó sẽ tiếp tục với hàm sau:

  1. if ($conn-connect_error) {
  2. die("Connection failed: " . $conn-connect_error);
  3. }

Function die() được thực thi tai đây, nó sẽ hủy script và cho kết quả mà ta đặt ra. Mặc định nó sẽ hiện Connection failed: và kèm theo một thông báo lỗi để ta biết lỗi do đâu.

Nếu kết nối thành công, phần code sau sẽ được thực thi.

  1. echo "Connected successfully";

Dòng này chỉ đơn giản hiện thông báo mà ta đã định sẵn, vì trước đó chúng ta đã dùng hàm IF chỉ được kích hoạt khi kết nối lỗi.

Phần cuối cùng của code là:

  1. mysqli_close($conn);

Nó sẽ đóng kết nối. Nếu không có dòng này, kết nối sẽ tự đóng sau khi script kết thúc. Bạn có thể dùng dòng này để đóng kết nối với database trước khi script kết thúc.

Bạn cũng có thể chạy code bằng cách truy cập script từ tên miền.

PDO

Một kết nối PDO database cần tạo ‘PDO object’ với Data Source Name (DSN), username và password. DSN định nghĩa loại database của bạn, tên database, và bất kỳ thông tin nào cần thiết khác. DSN có thể là một biến cơ bản được dùng làm tham số khi tạo PDO object, được hiển thị như code bên dưới.

PDO hỗ trợ nhiều loại database khác nhau và DSN là nơi định nghĩ nhiều kết nối khác nhau, thay thế dòng ‘mysql:’ với tên loại database khác. Trên thực tế, script có thể giúp user chọn kết nối nào cần được dùng và viết code chọn biến phù hợp trong DSN. Trong bài hướng dẫn này, chúng tôi sẽ chọn sử dụng MySQL. Đây là cách lấy database của website dựa trên PHP và MySQL.

Khi tạo PDO object dùng cho database connection, bạn có thể đổi nó thành mã ‘try…catch…’ . Có nghĩa là script này sẽ thử kết nối sử dụng code được xác định, nếu có vấn đề, code trong phần ‘catch’ sẽ chạy. Bạn có thể dùng catch block để hiển thị mã báo lỗi hoặc chay code khác nếu quá trình thử thất bại. Trong ví dụ của chúng ta, một mã báo lỗi đơn giản sẽ hiện ra để báo lỗi khi có thông tin nào không chính xác.

  1. ?php
  2. $servername = "mysql.hostinger.com";
  3. $username = "u266072517_user";
  4. $database = "u266072517_name";
  5. $password = "buystuffpwd";
  6.  
  7. // Create a new connection to the MySQL database using PDO
  8. $conn = new mysqli($servername, $username, $password);
  9.  
  10. // Check connection
  11. if ($conn-connect_error) {
  12. die("Connection failed: " . $conn-connect_error);
  13. }
  14. echo "Connected successfully";
  15. ?

Bước 3 — Kiểm tra kết nối và sửa lỗi thông dụng

Nếu code kết nối PHP với mysql thành công và không gặp vấn đề nào khác, bạn sẽ thấy thông báo này sau khi truy cập vào website:kết nối thành công

Trong trường hợp kết nối bị lỗi, bạn sẽ thấy thông báo khác. Mã lỗi có thể hơi khác giữa MySQLi và PDO.

Sửa lỗi PHP MySQL Connection: access denied for user

Ví dụ, nếu bạn điền không đúng mật khẩu cơ sở dữ liệu, lỗi sẽ hiện như sau:

Lỗi trên MySQLi:kết nối db thất bại

Lỗi trên PDO:

kết nối pdo thất bại

Vậy trong trường hợp nhìn thấy lỗi này, điều đầu tiên cần kiểm tra thông tin mật khẩu của database. Lỗi thông thường là do điền sai mật khẩu database. Một lý do khác có thể là bạn chưa có user được gán cho database. Trong control panel của Hostinger, thông tin database và mật khẩu có thể đặt lại trong mục  MySQL Databases:database hostinger

Và trong cPanel, bạn sẽ thấy thông tin như bên dưới, hãy chắc là bạn đã gán user cho database:cPanel MySQL Database Details

Sửa lỗi PHP MySQL Connection: connection failed. Can’t connect to MySQL server

Với MySQLi:kết nối thất bại

Can’t connect to MySQL server on ‘server’ (110) có nghĩa là script không thể tìm cách lấy database của website do server database không phản hồi. Lỗi này xảy ra có thể chúng ta đặt sai tên server. Có thể do chúng ta vẫn để tên server mặc định là localhost thay vì là tên server được cấp bởi nhà cung cấp hosting.

Với PDO:pdo lỗi host name

  • [HY000] có nghĩa là lỗi chung.
  • [2002] nghĩa là không thể kết nối tới MySQL server local. Phần còn lại của mã lỗi là thông tin thêm, giải thích rằng “host” không thể được tìm thấy.

 

Ngoài ra, khi sửa lỗi, hãy kiểm tra mã lỗi (tiếng Anh) được lưu trong file báo lỗi. Bạn có thể tìm thấy nó trong cùng thư mục script đang chạy. Ví dụ, nếu chúng ta đang chạy script trong thư mục public_html, bạn sẽ thấy file error_log cũng ở thư mục public_html.


Mở nó lên, bạn sẽ thấy lỗi khi script kết nối cơ sở dữ liệu trong php tạo ra, nó sẽ giúp bạn tìm cách sửa lỗi kết nối database.

 

Lời kết

Trong bài hướng dẫn này, chúng tôi đã hướng dẫn cơ bản cách kết nối php tới MySQL database bằng cách sử dụng MySQLi và PHP Data Objects (PDO). Bạn có thể sử dụng tài liệu này kết hợp với các script nâng cao khác, nhưng hãy làm bước này thành công vì kết nối cơ sở dữ liệu trong php trước là bước đầu tiên trong quá trình thao tác với database.

Các tài liệu khác:


Thủ Thuật Hay

470 Blog posts

Comments