áp dụng mysql extension (đã chấm dứt phát triển cùng không được răn dạy dùng) Sử dụng mysqli extension (hỗ trợ từ PHP 5 trở lên, là phiên bản cải tiến của mysql extension) Sử dụng PDO (PHP Data Object)

 PDO là gì?

PDO (PHP Data Object) là một trong database abstraction layer, có thể sử dụng các extension khác nhau để tiếp xúc với các CSDL không giống nhau (Oracle, DB2, Microsoft SQL server, Postgress SQL..) .PDO hoàn toàn có thể được thực hiện để xây dựng theo cả hướng thủ tục và theo phía đối tượng.

Bạn đang xem: Pdo là gì

cach-su-dung-pdo-trong-php

Ứng với từng CSDL khác biệt PDO đang sử dụng những loại driver khác nhau để làm việc với CSDL. Các lệnh SQL được truyền vào PDO đã được những driver này chuyển sang câu lệnh SQL tương xứng với CSDL đang được sử dụng. Chính vì vậy khi áp dụng PDO chúng ta có thể dễ dàng gửi sang một hệ quản trị csdl khác mà không cần thiết phải viết lại mã.

Kết nối cho CSDL vào PDO


$dsn = "mysql:host=localhost;dbname=ten_csdl";// phối options$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);// Create a new PDO instanacetry $db = new PDO($dsn, "user_dang_nhap_csdl", "password_csdl", $options);// Catch any errorscatch (PDOException $e) echo $e->getMessage();exit();
 Để có thể hiển thị giờ đồng hồ việt khi thao tác với cơ sở dữ liệu MySQL họ cần chạy lệnh "SET NAMES utf8" khi kết nối đến cơ sở dữ liệu MySQL. Giá trị PDO::ERRMODE_EXCEPTION trong thuộc tính PDO::ATTR_ERRMODE để giúp PDO ném ra ngoại lệ khi gặp lỗi đồng thời tạo nên PHP warning. Tuy nhiên bạn cũng có thể sử dụng try catch nhằm bắt lỗi nhằm mục tiêu che giấu các thông báo lỗi.

Khi thao tác với database trong PHP, đối với các lệnh SQL bao gồm tham số động bọn họ không bắt buộc truyền câu lệnh SQL trực tiếp trải qua chuỗi thay vì vậy họ nên sử dụng Prepared Statement nhằm tránh bị tiến công SQL Injection.

Chèn dữ liệu vào CSDL thông qua PDO


//Khởi chế tác Prepared Statement$stmt = $db->prepare("INSERT INTO users (name, email, age) values (:name, :mail, :age)");$stmt->bindParam(":name", "Nguyen Van A");$stmt->bindParam(":mail", "email_address");$stmt->bindParam("age", 22);$stmt->execute();/*****************Cách viết không giống *********************/$stmt = $db->prepare("INSERT INTO users (name, email, age)values (:name, :mail, :age)");$data = array("name"=>"Nguyen Van A", "mail"=>"email_address", "age"=> 22);$stmt->execute($data);
Đầu tiên họ sẽ tạo ra một Prepared Statement thông qua hàm prepare(). Ở đây bọn họ không truyền giá trị trực tiếp mang đến name, mail cùng age. Cầm cố vào đó họ sẽ sử dụng các place holder để giữ chỗ mang lại giá trị của những biến trên. Tiếp theo họ tiến hành gắn giá trị cho các place holder vào câu lệnh Prepared Statement thông qua hàm bindParam($tên_place_holder, $giá_trị_của_place_holder). Cuối cùng chúng ta thực thi prepared statement trải qua lệnh execute().

Xem thêm: Clorua Vôi Là Gì ? Những Ứng Dụng Trong Thực Tế Của Clorua Vôi

Truy vấn cơ sở dữ liệu với PDO:

Khi đọc tài liệu từ database, PDO đã trả về tài liệu theo cấu trúc mảng (array) hoặc đối tượng người sử dụng (object) thông qua các phương thức sau:

fetchAll(): trả về một mảng chứa tất cả các hàng trong tập kết quả trả về (result set). Một số giá trị phổ biến của fetch_mode: PDO::FETCH_BOTH (default): trả về tài liệu dạng mảng cùng với key là tên gọi của cột và cả số trang bị tự của cột. PDO::FETCH_ASSOC: trả về dữ liệu dạng mảng cùng với key là tên gọi cột của bảng vào CSDL. PDO::FETCH_NUM: trả về tài liệu dạng mảng với key là số sản phẩm công nghệ tự của cột. PDO::FETCH_OBJ: trả về một đối tượng người sử dụng của stdClass cùng với tên trực thuộc tính trong đối tượng người sử dụng là tên của cột. PDO::FETCH_CLASS: Gán giá trị của từng cột đến từng ở trong tính (property/attribute) của một lớp được hướng đẫn trước. fetch(): trả về hàng sau đó từ result set. FetchColumn( ): trả về 1 quý giá của cột được hướng dẫn và chỉ định trong hàng tiếp đến của result set.

Ví dụ truy hỏi vấn tài liệu với PDO


$stmt = $db->prepare("SELECT name, email, age from users");//Thiết lập kiểu dữ liệu trả về$stmt->setFetchMode(PDO::FETCH_ASSOC);$stmt->execute();$resultSet = $stmt->fetchAll();/*Trong ngôi trường hợp không setFetchMode() bạn cũng có thể sử dụng$resultSet = $stmt->fetchAll(PDO::FETCH_ASSOC);*/foreach ($resultSet as $row) echo $row<"name"> . " ";echo $row<"email"> . " ";echo $row<"age"> . " ";
Do dữ liệu lấy về thông qua FETCH_ASSOC là tài liệu dưới dạng mảng 2d nên chúng ta sẽ thực hiện vòng lặp for để chăm nom qua từng sản phẩm và kéo ra giá trị của từng phần tử thông qua tên của cột bên phía trong CSDL.