[PHP] – Bài 15: Kết nối với cơ sở dữ liệu MySQL bằng PDO

0

Trong bài học trước, chúng ta đã tìm hiểu về phương thức MySQLi để tương tác với CSDL. Bài học này, mình sẽ hướng dẫn thêm một cách khác là PDO. Tính năng này cho phép việc kết nối và tương tác với cơ sở dữ liệu trở lên dễ dàng và hiệu quả hơn so với MySQLi.

Video Kết nối với cơ sở dữ liệu MySQL bằng PDO

Hướng dẫn chi tiết

Kết nối với database và tạo bảng

Đối với PDO, chúng ta sẽ xử lý theo kiểu hướng đối tượng nhé. Đầu tiên, chúng ta cần dựng đối tượng PDO, truyền vào các tham số cho hàm construct.

$host_name = 'localhost';
$db_name = 'demo_pdo';
$user_name = 'demo_pdo';
$password = 12345678;

Phần PDO, chúng ta nên để trong try – catch để bắt lỗi nhé.

$connect = new PDO("mysql:host=$host_name;dbname=$db_name" , $user_name , $password);
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Tạo bảng dữ liệu. Chúng ta sẽ trỏ tới phương thức exec để chạy câu truy vấn.

$sql = "CREATE TABLE `demo_pdo`.`user` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
`username` VARCHAR(5) NULL DEFAULT NULL , 
`password` VARCHAR(5) NULL DEFAULT NULL , 
`email` VARCHAR(5) NULL DEFAULT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;";
$connect->exec($sql);

INSERT – Thêm dữ liệu

Thêm dữ liệu đơn giản, chúng ta có thể sử dụng cách đơn giản như trên

$sql  = "INSERT INTO `user`(`username`, `password`, `email`) VALUES ('abc',123,123)";
$connect->exec($sql);

Tuy nhiên, với các câu lệnh có biến số, chúng ta có một cách tốt hơn, đảm bảo về bảo mật cho cách thao tác với CSDL. Ý tưởng được đưa ra đó: thay vì thực thi ngay câu sql, chúng ta sẽ chuẩn bị prepare và thực thi bằng phương thức execute

Các tham số :username, :pass, :email được bind (trói buộc) vào các biến $username, $pass, $email bằng phương thức bindParam.

$sql  = "INSERT INTO `user`(`username`, `password`, `email`) VALUES (:username,:pass,:email)";
$query = $connect->prepare($sql);
$query->bindParam(':username', $username);
$query->bindParam(':pass', $pass);
$query->bindParam(':email', $email);
$username = 'xyz';
$pass = '123';
$email = '123';
$query->execute();

SELECT – Truy vấn dữ liệu

Truy vấn dữ liệu. Chúng ta sẽ thực thi truy vấn với prepare và execute. Để lấy dữ liệu, chúng ta sẽ dùng phương thức fetch để duyệt qua từng dòng dữ liệu. Phương thức fetch có thể truyền vào tham số như sau:

+ Để trống: dữ liệu trả về sẽ có dạng mảng đầy đủ

+ FETCH_ASSOC trả về mảng chỉ có key và value

+ FETCH_NUM trả mảng chỉ số và value /

+ FETCH_OBJ trả về đối tượng

$sql = "SELECT * FROM `user`";
$query = $connect->prepare($sql);
$query->execute();
$arr_kq = array();
while($kq = $query->fetch( PDO::FETCH_OBJ )){
  
  array_push($arr_kq,$kq);
}
var_dump($arr_kq);

UPDATE – Sửa dữ liệu

Các bạn có thể update bằng cách thực thi câu lệnh sql.

$sql = "UPDATE `user` SET `username` = 'thui', `password` = '234' WHERE `user`.`id` = 2;";
$connect->exec($sql);

DELETE – Xóa dữ liệu

$sql = "DELETE FROM `user` WHERE `user`.`id` = 2";
$connect->exec($sql);

PREPARE trong MySQLi

Prepare theo kiểu hướng đối tượng

$connect = new mysqli('localhost', 'mysqli', 12345678 , 'mysqli');
$query = $connect->prepare("INSERT INTO `user`(`username`, `password`, `email`) VALUES (?,?,?)");
$query->bind_param("sss",$username, $password , $email );
$username = 'abcd';
$password = '123';
$email = '123';
$query->execute();

Prepare dạng hướng thủ tục

$connect = mysqli_connect("localhost", "mysqli", "12345678", "12345678");
$query = mysqli_prepare($link, "INSERT INTO `user`(`username`, `password`, `email`) VALUES (?,?,?)");
mysqli_stmt_bind_param($query, "sss", $username , $password, $email);
$username = 'abcd';
$password = '123';
$email = '123';
mysqli_stmt_execute($query);

Tài liệu bài học: Download

Nếu có thắc mắc, hãy đặt câu hỏi bằng cách comment bên dưới, qua email, hoặc nhắn tin qua Fanpage Góc làm web.

Liên hệ

Để lại một trả lời

Địa chỉ email của bạn sẽ không được công bố.