PHP – kết nối MySQL

Từ PHP 5 có thể làm việc với MySQL database bằng

  • MySQLi extension
  • PDO (PHP Data Objects)

Nên dùng MySQLi hay PDO

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

PDO có thể 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, khi bạn muốn chuyển đổi qua sử dụng một cơ sở dữ liệu khác, PDO làm cho quá trình dễ dàng. Bạn chỉ phải thay đổ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ộ các truy vấn.

Cả hai đều hướng đối tượng, nhưng MySQLi cũng cung cấp procedural API(Các hàm được biên soạn sẵn, có thể gọi và sử dụng dễ dàng).

Cả 2 đều hỗ trợ Prepared Statements. Prepared Statements giúp bảo vệ tránh SQL injection.

Những ví dụ bên dưới sử dụng cả MySQLi và PDO bao gồm

  • MySQLi (object-oriented)
  • MySQLi (procedural)
  • PDO

Cài đặt MySQLi

MySQLi extension được cài đặt tự động khi gói mysql php5 được cài đặt.

Xem chi tiết : http://php.net/manual/en/mysqli.installation.php

Cài đặt PDO

Xem chi tiết : http://php.net/manual/en/pdo.installation.php

Kết nối đến MySQL

Trước khi truy cập dữ liệu trong cơ sở dữ liệu MySQL, chúng ta cần kết nối đến nó:

MySQLi Object-Oriented

<?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";
?>

MySQLi Procedural

<?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";
?>

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();
    }
?>

Đối với PDO, phải chỉ định 1 database để connect, nếu không một exception được ném ra. Một lợi ích lớn của PDO là nó có một exception class để xử lý các vấn đề truy vấn database.

Đóng kết nối

Kết nối sẽ tự động đóng khi kết thúc script. Để đóng kết nối trước có thể sử dụng:

MySQLi Object-Oriented

$conn->close();

MySQLi Procedural

mysqli_close($conn);

PDO

$conn = null;