Hotline : 1800 1093 - 07 088 44444
Thích
Chia sẻ

Kết nối cơ sở dữ liệu MySQL với PHP

21/06/2021

Để truy cập và thêm nội dung vào cơ sở dữ liệu MySQL, trước tiên bạn phải kết nối MySQL với PHP. Trong hướng dẫn này, hãy tìm hiểu cách sử dụng MySQLi ExtensionPHP Data Objects để kết nối với MySQL. Các hàm mysql_ truyền thống không dùng được nữa và chúng tôi sẽ không đề cập đến chúng trong hướng dẫn này.

kết nối mysql với php
Hướng dẫn kết nối MySQL với PHP với 2 cách

Điều kiện cần có:

2 cách kết nối MySQL với PHP

Có hai cách phổ biến để kết nối MySQL với PHP:

  1. Với phần mở rộng  MySQLi Extension của PHP.
  2. Với PHP Data Objects (PDO)

Hướng dẫn này cũng bao gồm các giải thích về thông tin xác thực được sử dụng trong PHP script và các lỗi tiềm ẩn mà bạn có thể gặp khi sử dụng MySQLi và PDO.

Kết nối MySQL với PHP bằng MySQLi Extension

MySQLi là một extension chỉ hỗ trợ cơ sở dữ liệu MySQL. Nó cho phép truy cập vào các chức năng có trong hệ thống MySQL (phiên bản 4.1 trở lên), cung cấp cả giao diện thủ tục và hướng đối tượng. Nó hỗ trợ các câu lệnh phía server, nhưng không hỗ trợ từ phía máy client.

MySQLi extension được bao gồm cả phiên bản PHP 5 và các phiên bản mới hơn.

PHP script để kết nối với cơ sở dữ liệu MySQL bằng cách tiếp cận MySQLi như sau:

<?php
$servername = "localhost";
$database = "database";
$username = "username";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);

// Check connection

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo “Connected successfully”;
mysqli_close($conn);
?>

Giải thích về thông tin xác thực

Phần đầu tiên của script là bốn biến (server name, database, username và password) và các giá trị tương ứng của chúng. Các giá trị này phải tương ứng với chi tiết kết nối của bạn.

kết nối php với mysql
4 biến của script

Tiếp theo là hàm chính của PHP mysqli_connect (). Nó thiết lập một kết nối với database được chỉ định.

php connect mysql
Hàm mysql_connect

Sau đây là câu lệnh “if”. Đây là một phần của code cho biết liệu kết nối đã được thiết lập hay chưa. Khi kết nối không thành công, nó sẽ đưa ra thông báo Connection failed.. Hàm die sẽ in thông báo và sau đó thoát ra khỏi script.

kết nối csdl voi php
Lệnh if và lệnh die

Nếu kết nối thành công, nó sẽ hiển thị “Connected successfully.”.

php kết nối mysql
Thông báo kết nối thành công

Khi script kết thúc, kết nối với database cũng đóng. Nếu bạn muốn kết thúc code theo cách thủ công, hãy sử dụng hàm mysqli_close.

cách kết nối mysql với php
Sử dụng mysqli_close để kết thúc kết nối

Kết nối MySQL với PHP bằng PDO

PHP Data Objects (PDO) là một extension như một interface để kết nối với database. Không giống như MySQLi, nó có thể thực hiện bất kỳ chức năng database nào và không giới hạn ở MySQL. Nó cho phép sự linh hoạt giữa các database và tổng quát hơn MySQL. PDO hỗ trợ các câu lệnh từ phía server và cả client.

Lưu ý: Kết nối MySQL với PHP bằng PDO sẽ không thành công nếu phiên bản PHP cũ hơn 5.0 (bao gồm cả PHP 5.1).

Kết nối MySQL với PHP thông qua PDO như sau:

<?php

$servername = "localhost";
$database = "database";
$username = "username";
$password = "password";
$charset = "utf8mb4";

try {
  $dsn = "mysql:host=$servername;dbname=$database;charset=$charset";
  $pdo = new PDO($dsn, $username, $password);
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  echo “Connection Okay”;
  return $pdo
}
catch (PDOException $e) {
  echo “Connection failed: ”. $e->getMessage();
}
?>

Cú pháp thông tin xác thực

Đầu tiên, chúng ta có năm biến (server name, database, username, password, và charset) và các giá trị của chúng. Các giá trị này phải tương ứng với chi tiết kết nối của bạn.

Server name sẽ là localhost. Nếu được kết nối với một server online, hãy nhập tên server đó vào server name.

Biến “charset” cho database biết mã hóa mà nó sẽ nhận và gửi dữ liệu. Tiêu chuẩn được đề xuất là utf8mb4.

connect database php
Thêm biến charset

Try và Catch

Tài sản lớn của PDO là có một lớp ngoại lệ để xử lý mọi vấn đề tiểm ẩn trong các truy vấn database. Nó giải quyết những vấn đề này bằng trycatch.

Nếu sự cố phát sinh trong khi cố gắng kết nối, nó sẽ ngừng chạy và cố gắng bắt và giải quyết sự cố. Các block try có thể được đặt để hiển thị thông báo lỗi hoặc chạy mã thay thế.

kết nối cơ sở dữ liệu mysql với php
Giải quyết vấn đề tìm ẩn bằng try và catch

Tham số đầu tiên trong block try và catch là DSN, viết tắt của Data(base) Source Name. Nó rất quan trọng vì nó xác định loại và tên của database, cùng với bất kỳ thông tin bổ sung nào khác.

Trong ví dụ này, chúng tôi đang sử dụng MySQL database. Tuy nhiên, PDO hỗ trợ nhiều loại database khác nhau. Nếu bạn có một database khác, hãy thay thế phần cú pháp đó (mysql) bằng database bạn đang sử dụng.

hướng dẫn cahcs kết nối csdl mysql với php
Thay thế mysql bằng database bạn đang sử dụng

Tiếp theo là biến PDO. Biến này sẽ thiết lập kết nối với database. Nó có ba tham số:

  1. Data Source Name (DSN).
  2. Username cho database của bạn.
  3. Password cho database của bạn.
tạo username và password pdo
PDO gồm 3 tham số username, password và DSN

Sau đây là phương thức setAttribute thêm hai tham số vào PDO:

  1. PDO::ATTR_ERRMODE
  2. PDO::MODERATOR_EXCEPTION

Phương pháp này hướng dẫn PDO chạy trong trường hợp truy vấn không thành công.

chạy pdo
setAttribute chạy trong truy vấn không thành công

Thêm echo “Connection Okay.” để xác nhận kết nối đã được thiết lập.

kết nối thành công mysql với php
Xác định kết nối được thiết lập

Trả về biến PDO để được kết nối với database.

kết nối database
Trả về biến PDO

Sau khi trả về biến PDO, hãy xác định PDOException trong block catch bằng cách hướng nó hiển thị thông báo kết nối không thành công.

connection fails
Hướng đó hiển thị thông báo “Connection failed”

Các lỗi tiềm ẩn khi kết nối MySQL với PHP bằng MySQLi và PDO

Password không đúng

Password trong PHP code cần phải tương ứng với password trong database. Nếu cả hai không khớp, kết nối với database không thể được thiếp lập. Bạn sẽ nhận được thông báo lỗi cho biết kết nối không thành công.

Phương pháp khả thi:

  1. Kiểm tra chi tiết database để đảm bảo password chính xác.
  2. Đảm bảo người dùng được chỉ định cho database.

Không thể kết nối MySQL Server

PHP có thể không kết nối được với MySQL server nếu tên server không được nhận dạng. Đảm bảo rằng tên server được đặt thành localhost.

Trong trường hợp xảy ra lỗi khác, hãy nhớ thêm file “error_log” để trợ giúp khi cố gắng giải quyết bất kỳ vấn đề nào. File nằm trong cùng một folder nơi script đang chạy.

Tổng kết

Hướng dẫn này trình bày chi tiết cách kết nối MySQL với PHP bằng hai công cụ đó là MySQLiPDO để giúp bạn có thể hiểu rõ hơn về chúng.

Cả MySQLi và PDO đều có điểm mạnh của chúng. Tuy nhiên, hãy nhớ rằng MySQLi chỉ sử dụng cho database MySQL. Do đó, nếu bạn muốn thay đổi sang database khác, bạn sẽ phải viết lại toàn bộ code. Mặt khác, PDO hoạt động với 12 database khác nhau, giúp việc di chuyển dễ dàng hơn nhiều.

Hy vọng bài viết này sẽ giúp ích cho bạn. Chúc bạn may mắn! Đừng quên theo dõi Vietnix để cập nhật kiến thức và tài liệu bổ ích khác.

Nếu bạn có thắc mắc hay có vấn đề cần hỗ trợ, bạn có thể liên hệ trực tiếp với Vietnix thông qua các kênh sau:
  • Hotline: 1800 1093 - 07 088 44444
  • Email: support@vietnix.vn
  • Hoặc chat trực tiếp với Vietnix thông qua biểu tượng Livechat ở góc phải màn hình. Đội ngũ chuyên viên của chúng tôi luôn sẵn sàng tư vấn và hỗ trợ bạn 24/7.
Vietnix hiện đang có chương trình khuyến mãi lớn nhất trong năm, giảm giá 50%  dịch vụ Hosting. Đăng ký dùng thử ngay và Vietnix sẽ hoàn tiền 100% nếu quý khách không hài lòng với chất lượng sản phẩm, dịch vụ!
Mình là Bo - admin của Quản Trị Linux. Mình đã có 10 năm làm việc trong mảng System, Network, Security và đã trải nghiệm qua các chứng chỉ như CCNP, CISSP, CISA, đặc biệt là chống tấn công DDoS. Gần đây mình trải nghiệm thêm Digital Marketing và đã hòan thành chứng chỉ CDMP của PersonVUE. Mình rất thích được chia sẻ và hỗ trợ cho mọi người, nhất là các bạn sinh viên. Hãy kết nối với mình nhé!
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments