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 ("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, phần 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, 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ợ Báo cáo chuẩn bị. Các câu lệnh được chuẩn bị sẵn bảo vệ khỏi sự chèn ép của 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à trong 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: 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.
Để 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
Mở kết nối với MySQL
Trước khi chúng tôi 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ế:
// Kiểm tra kết nối
if (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 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.
Đó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;