Kết nối database PHP

Kết nối PHP với MySQL, với phiên bản PHP 5 và các cao hơn có thể làm việc với một cơ sở dữ liệu MySQL bằng cách sử dụng:

  • Phần mở rộng MySQLi (chữ "i" là viết tắt của cải tiến - improved).
  • PDO (đối tượng dữ liệu PHP).

Các phiên bản trước của PHP đã sử dụng phần mở rộng MySQL. Tuy nhiên, tiện ích mở rộng này đã không được dùng nữa vào năm 2012.


Nội dung chính

  • Có nên sử dụng MySQLi hoặc PDO không?
  • Ví dụ về MySQL trong cả hai định dạng MySQLi và PDO
    • Cài đặt MySQLi
    • Cài đặt PDO
  • PHP kết nối với MySQL
  • Đóng kết nối

Có nên sử dụng MySQLi hoặc PDO không?

Cả MySQLi và PDO đều có ưu điểm:

PDO làm việc trên 12 hệ thống cơ sở dữ liệu khác nhau, trong khi MySQLi chỉ làm việc với cơ sở dữ liệu MySQL.

Vì vậy, nếu bạn phải chuyển đổi dự án để sử dụng một cơ sở dữ liệu khác, bạn nên sử dụng PDO. Bạn chỉ phải thay đổi thông tin kết nối và một vài truy vấn. Với MySQLi, bạn sẽ cần phải viết lại toàn bộ code - bao gồm các truy vấn.

Cả hai đều hướng đối tượng, nhưng MySQLi cũng cung cấp một API thủ tục.

Cả hai hỗ trợ PreparedStatements. Các câu lệnh PreparedStatements được bảo vệ khỏi việc SQL injection và rất quan trọng đối với bảo mật ứng dụng web.



Ví dụ về MySQL trong cả hai định dạng MySQLi và PDO

Bài này và các bài sau, chúng ta tìm hiểu về ba cách làm việc với PHP và MySQL:

  • MySQLi (hướng đối tượng)
  • MySQLi (thủ tục)
  • PDO

Cài đặt MySQLi

Đối với Linux và Windows: Phần mở rộng MySQLi được cài đặt tự động, khi gói mysql php5 được cài đặt.

Để biết chi tiết cài đặt, hãy truy cập: http://php.net/manual/en/mysqli.installation.php


Cài đặt PDO

Để biết chi tiết cài đặt, hãy truy cập: http://php.net/manual/en/pdo.installation.php


PHP kết nối với MySQL

Trước khi chúng ta có thể truy cập dữ liệu trong cơ sở dữ liệu MySQL, chúng ta cần phải mở một kết nối với máy chủ:

Ví dụ (MySQLi hướng đối tượng)

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

PHP là một ngôn ngữ tuyệt vời và phổ biến!

Lưu ý về ví dụ hướng đối tượng ở trên: $connect_error bị lỗi đối vơi bản PHP 5.2.9 và 5.3.0 trở về trước. Nếu bạn cần đảm bảo khả năng tương thích với các phiên bản PHP trước 5.2.9 và 5.3.0, hãy sử dụng code sau thay vào đó:

// kiểm tra kết nối
if (mysqli_connect_error()) {
    die("Database connection failed: " . mysqli_connect_error());
}

Ví dụ (MySQLi hướng thủ tục)


Ví dụ (PDO)

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
    }
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
?>

Lưu ý rằng trong ví dụ PDO ở trên chúng ta cũng đã chỉ định một cơ sở dữ liệu (myDB). PDO yêu cầu một cơ sở dữ liệu hợp lệ để kết nối. Nếu không có cơ sở dữ liệu được chỉ định, một ngoại lệ được ném.

Một lợi ích lớn của PDO là nó có một lớp ngoại lệ để xử lý bất kỳ vấn đề nào có thể xảy ra trong các truy vấn cơ sở dữ liệu của chúng ta. Nếu một ngoại lệ được ném vào trong khối try {}, script sẽ dừng thực hiện và chuyển trực tiếp đến khối catch () {} đầu tiên.

Mở đầu cho series học PHP và MySql, bài này chúng ta sẽ tìm hiểu về các cách cách kết nối PHP với MySql. Nhìn chung thì PHP có hỗ trợ cho chúng ta 3 phương thức kết nối đến Mysql nhưng trong đó có một phương thức không hỗ trợ nữa nên mình sẽ chỉ giới thiệu hai phương thức còn lại thôi.

1, Chuẩn bị.

-Để có thể kết nối được PHP với MySql thì các bạn cần phải biết được các thông số trên SQL như:

  • hostname: Server của MySql (mặc định là localhost)
  • username: là tên truy cập vào MySql (mặc định là root).
  • password: Là mật khẩu truy cập vào MySql (mặc định là rỗng).
  • databasename: Là tên database mà các bạn muốn kết nối.

-Đồng thời bên phía PHP thì các bạn cũng cần cài đặt các gói hỗ trợ kết nối PHP với MySql (mặc định thì PHP cũng đã tích hợp sẵn).

2, Kết nối PHP với MySql bằng mysqli.

-Đầu tiên chúng ta phải kể đến mysqli là gì? thì ở đây mysqli là viết tắt của cụm từ mysql improved (cải tiến), nó là một thư viện giúp PHP có thể kết nối được với MySql hỗ trợ từ PHP5 trở đi. 

mysqli hướng thủ tục

-Để kết nối PHP với MySql bằng phương thức này thì chúng ta dùng hàm mysqli_connect() với cú pháp như sau:

mysqli_connect(hostame, username, password, databasename);

(Các thông số trên các bạn xem ở trên nhé)

VD:

//khai báo biến host
$hostName = 'localhost';
// khai báo biến username
$userName = 'root';
//khai báo biến password
$passWord = '';
// khai báo biến databaseName
$databaseName = 'db_tuts';
// khởi tạo kết nối
$connect = mysqli_connect($hostName, $userName, $passWord, $databaseName);
//Kiểm tra kết nối
if (!$connect) {
    exit('Kết nối không thành công!');
}
// thành công
echo 'Kết nối thành công!';

mysqli hướng đối tượng

-Đối với phương thức này các bạn chỉ cần khởi tạo class mysqli với cú pháp như sau:

new mysqli(hostname, username, password, databasename, port, socket);

(Các thông số trên các bạn xem ở trên nhé)

VD:

//khai báo biến host
$hostName = 'localhost';
// khai báo biến username
$userName = 'root';
//khai báo biến password
$passWord = '';
// khai báo biến databaseName
$databaseName = 'db_tuts';
// khởi tạo kết nối
$connect = new mysqli($hostName, $userName, $passWord, $databaseName);
//Kiểm tra kết nối
if ($connect->connect_error) {
    exit('Kết nối không thành công. chi tiết lỗi:' . $connect->connect_error);
}
// thành công
echo 'Kết nối thành công!';

3, Kết nối PHP với MySql bằng PDO.

-Ở đây PDO là viết tắt của chữ PHP Data Object, với gói này bạn có thể kết nối PHP đến rất nhiều các database khác như Oracel,postpreSQL,...

-Để kết nối PHP với MySql bằng PDO các bạn chỉ cần khởi tạo class PDO với cú pháp:

new PDO(dsn, username, password, option);

 Trong đó: dsn chứa các thông tin như database drive,hostname,databasename còn option chứa các thông số tùy chỉnh(nói sau).

VD:

//khai báo biến host
$hostName = 'localhost';
// khai báo biến username
$userName = 'root';
//khai báo biến password
$passWord = '';
// khai báo biến databaseName
$databaseName = 'db_tuts';
// khởi tạo kết nối
try {
    $connect = new PDO('mysql:host=' . $hostName . ';dbname=' . $databaseName, $userName, $passWord);
    $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //thành công
    echo 'thành công';
} catch (PDOException $e) {
    //thất bại
    die($e->getMessage());
}

4, Ngắt kết nối.

-Để ngắt kết nối PHP với MySql các bạn sử dụng một trong các cách sau (chú ý kết nối theo cách nào thì hủy theo cách đó).

mysqli hướng thủ tục

-Để hủy kết nối với phương thức này thì các bạn dùng hàm

//khai báo biến host
$hostName = 'localhost';
// khai báo biến username
$userName = 'root';
//khai báo biến password
$passWord = '';
// khai báo biến databaseName
$databaseName = 'db_tuts';
// khởi tạo kết nối
$connect = mysqli_connect($hostName, $userName, $passWord, $databaseName);
//Kiểm tra kết nối
if (!$connect) {
    exit('Kết nối không thành công!');
}
// thành công
echo 'Kết nối thành công!';
0 với cú pháp

mysqli_close(connect);

-Với connect là biến khởi tạo kết nối.

VD: Hủy kết nối với VD phần trên

mysqli_close($connect);

mysqli hướng đối tượng

-Đê hủy kết nối với cách này thì các bạn chỉ cần gọi phương thức

//khai báo biến host
$hostName = 'localhost';
// khai báo biến username
$userName = 'root';
//khai báo biến password
$passWord = '';
// khai báo biến databaseName
$databaseName = 'db_tuts';
// khởi tạo kết nối
$connect = mysqli_connect($hostName, $userName, $passWord, $databaseName);
//Kiểm tra kết nối
if (!$connect) {
    exit('Kết nối không thành công!');
}
// thành công
echo 'Kết nối thành công!';
1

VD: Hủy kết nối với VD phần trên

$connect->close();

PDO

-Để hủy kết nối bằng cách này thì các bạn chỉ cần set biến khởi tạo về null.

VD: Hủy kết nối với VD phần trên

$connect = null

5, Nên dùng phương thức nào.

- Có lẽ mình không nên nói nhiều ở phần này mà cho các bạn xem bảng sau rồi các bạn tự đưa ra kết luận nhé!

#PDOMySQLiHỗ trợ kết nối12 databaseMySQLAPIOOPOOP + proceduralKết nốiĐơn giảnĐơn giảnNamed parameters (cái này không biết dịch như nào cho đúng à)YesNoObject mappingYesYesPrepared statements 
(client side)YesNoPerformance(tối ưu)FastFastStored procedures (cái này đọc trong series mysql)YesYes

6, Lời kết.

-Ở trên mình đã giới thiệu với các bạn cách kết nối PHP với MySql bằng các cách mà PHP hiện đang hỗ trợ, ngoài ra nó còn hỗ trợ phương thức mysql nữa nhưng ở PHP7 đã không còn hỗ trợ nữa nên mình không nhắc đến ở đây.