PHP Kết nối với MySQL
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:
- Phần mở rộng MySQLi (chữ "i" là viết tắt của cải tiến)
- 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.
Tôi 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 thì đó sẽ là "Bất cứ điều gì bạn thích".
Cả MySQLi và PDO đều có những ưu điểm:
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ác truy vấn.
Cả hai đều hướng đối tượng, nhưng MySQLi cũng cung cấp API thủ tục.
Cả hai đều hỗ trợ Báo cáo đã chuẩn bị. Câu lệnh đã chuẩn bị bảo vệ khỏi việc tiêm SQL và rất quan trọng đối với bảo mật ứng dụng web.
Ví dụ về MySQL trong cả cú pháp MySQLi và PDO
Trong phần này và các chương tiếp theo, chúng tôi trình bày 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: Tiện ích mở rộng MySQLi được cài đặt tự động trong hầu hết các trường hợp khi gói php5 mysql được cài đặt.
Để biết chi tiết cài đặt, hãy truy cập: https://php.net/manual/en/mysqli.installation.php
Cài đặt PDO
Để biết chi tiết cài đặt, hãy truy cập: https://php.net/manual/en/pdo.installation.php
Mở kết nối tới MySQL
Trước khi có thể truy cập dữ liệu trong cơ sở dữ liệu MySQL, chúng ta cần có khả năng 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:
// Kiểm tra kết nối
nếu (mysqli_connect_error()) {
die("Kết nối cơ sở dữ liệu không thành công: " . 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 cơ sở dữ liệu (myDB) . PDO yêu cầu 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 đưa ra.
Mẹo: Lợi ích lớn nhất của PDO là nó có một lớp ngoại lệ để xử lý mọi vấn đề 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 đưa ra trong khối try{ }, tập lệnh sẽ dừng thực thi và chuyển trực tiếp đến khối Catch(){ } đầu tiên.
Đóng kết nối
Kết nối sẽ tự động bị đó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;