PHP kết nối với MySQL

Lượt xem: 15752

PHP 5 trở lên có thể hoạt động với cơ sở dữ liệu MySQL bằng cách sử dụng:

Tiện ích mở rộng MySQLi ("i" là viết tắt của cải tiến)

PDO (Đối tượng dữ liệu PHP)(PHP Data Objects)

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ên sử dụng MySQLi hay PDO?

Nếu bạn cần một câu trả lời ngắn gọn, nó sẽ là "Bất cứ điều gì bạn thích".

Cả MySQLi và PDO đều có lợi thế:

PDO sẽ hoạt động trên 12 hệ thống cơ sở dữ liệu khác nhau, trong khi MySQLi sẽ chỉ hoạt động với cơ sở dữ liệu MySQL.

Vì vậy, nếu bạn phải chuyển dự án của mình sang sử dụng cơ sở dữ liệu khác, PDO sẽ giúp quá trình này trở nên dễ dàng.

Bạn chỉ phải thay đổi chuỗi 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ộ mã - 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 đều hỗ trợ câu lệnh chuẩn bị sẵn (Prepared Statements). Các câu lệnh được chuẩn bị sẵn bảo vệ khỏi SQL injection và rất quan trọng đối với bảo mật ứng dụng web.

Cài đặt MySQLi

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

Hướng dẫn chi tiết cài đặt: http://php.net/manual/en/mysqli.installation.php

Cài đặt PDO

Trên windows:

Chọn các tệp DLL dành riêng cho cơ sở dữ liệu khác và sử dụng dl () để tải chúng trong thời gian chạy, hoặc kích hoạt chúng trong php.ini bên dưới php_pdo.dll

Ví dụ:


extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll 

Hướng dẫn chi tiết cài đặt: https://www.php.net/manual/en/pdo.installation.php

Mở 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 tôi cần có thể kết nối với máy chủ:

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

 


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

// Create connection
$conn = new mysqli($servername, $username, $password);

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


Lưu ý về ví dụ hướng đối tượng ở trên:

$connect_error đã bị hỏng cho đến phiên bản PHP 5.2.9 và 5.3.0. 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 mã sau để thay thế:


// Check connection
if (mysqli_connect_error()) {
  die("Database connection failed: " . mysqli_connect_error());
}

Ví dụ (Thủ tục MySQLi)


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

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

// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>


Ví dụ (PDO)


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

try {
  $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected successfully";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
}
?>


Lưu ý: Trong ví dụ PDO ở trên, chúng tôi 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 nào được chỉ định, một ngoại lệ sẽ được ném ra.

Mẹo: 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 tôi. Nếu một ngoại lệ được đưa ra trong khối try {}, tập lệnh sẽ ngừng thực thi và chuyển trực tiếp đến khối catch () {} đầu tiên.

Xem tới đây chắc hẳn bạn sẽ đặt câu hỏi vậy kết nối với database cụ thể thì sẽ thế nào. Trong video mình có trình bày và hướng dẫn chi tiết nhé

Đóng kết nối

Kết nối sẽ tự động đóng khi tập lệnh kết thúc. Để đóng kết nối trước đó, hãy sử dụng như sau:

Hướng đối tượng MySQLi:


$conn->close();

Thủ tục MySQLi:


mysqli_close($conn);

PDO:


$conn = null;