PDO có đi kèm với PHP không?

Đối tượng dữ liệu PHP (PDO) xác định giao diện nhẹ để truy cập cơ sở dữ liệu trong PHP. Nó cung cấp một lớp trừu tượng truy cập dữ liệu để làm việc với cơ sở dữ liệu trong PHP. Nó xác định API nhất quán để làm việc với các hệ thống cơ sở dữ liệu khác nhau

Các lớp PDO PHP

$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
3 đại diện cho kết nối giữa PHP và máy chủ cơ sở dữ liệu.
$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
4 đại diện cho một câu lệnh đã chuẩn bị và sau khi câu lệnh được thực thi, một tập hợp kết quả được liên kết.
$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
5 đại diện cho lỗi do PDO đưa ra

Trong hướng dẫn này, chúng tôi làm việc với cơ sở dữ liệu MySQL

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);

Các lệnh SQL này tạo một bảng

$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
6

Truy vấn PHP PDO

PDO

$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
7 thực thi một câu lệnh SQL trong một lệnh gọi hàm duy nhất, trả về tập kết quả (nếu có) được trả về bởi câu lệnh

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;

Ví dụ trả về phiên bản MySQL

$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";

Các biến này được sử dụng để tạo chuỗi kết nối đến cơ sở dữ liệu.

$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
8 là Tên nguồn dữ liệu, chứa thông tin cần thiết để kết nối với cơ sở dữ liệu

$pdo = new PDO($dsn, $user, $passwd);

Một đối tượng

$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
3 mới được tạo. Chúng tôi chuyển cho hàm tạo tên nguồn dữ liệu, tên người dùng và mật khẩu. Lớp
$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
3 đại diện cho kết nối giữa PHP và máy chủ cơ sở dữ liệu

$stm = $pdo->query("SELECT VERSION()");

Phương thức

$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
7 thực thi một câu lệnh SQL trong một lần gọi hàm. Nó trả về tập kết quả

$version = $stm->fetch();

Phương thức

$pdo = new PDO($dsn, $user, $passwd);
2 của câu lệnh PDO tìm nạp hàng tiếp theo từ tập kết quả. Trong trường hợp của chúng tôi, nó là một phiên bản của MySQL

echo $version[0] . PHP_EOL;

$pdo = new PDO($dsn, $user, $passwd);
3 là một mảng;

$ php version.php
8.0.29-0ubuntu0.22.04.2

Đây là đầu ra

PDO

$pdo = new PDO($dsn, $user, $passwd);
4 thực thi một câu lệnh SQL và trả về số hàng bị ảnh hưởng

Quảng cáo
exec("DELETE FROM countries WHERE id IN (1, 2, 3)");

echo "The statement affected $nrows rows\n";

Ví dụ mã xóa ba hàng. Nó in số lượng hàng bị ảnh hưởng

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
0

Trong câu lệnh SQL này, chúng tôi xóa các hàng có id 1, 2 và 3. Số lượng hàng đã xóa được lưu trữ trong biến

$pdo = new PDO($dsn, $user, $passwd);
5

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
1

Chúng tôi in số hàng đã xóa

Kiểu tìm nạp PHP PDO

Tham số kiểu tìm nạp kiểm soát cách hàng tiếp theo sẽ được trả lại cho người gọi. Chẳng hạn,

$pdo = new PDO($dsn, $user, $passwd);
6 trả về một mảng được lập chỉ mục theo tên cột,
$pdo = new PDO($dsn, $user, $passwd);
7 trả về một mảng được lập chỉ mục theo số cột và
$pdo = new PDO($dsn, $user, $passwd);
8 trả về một mảng được lập chỉ mục bởi cả tên cột và số cột được lập chỉ mục. Kiểu tìm nạp mặc định là
$pdo = new PDO($dsn, $user, $passwd);
8

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
2

Trong ví dụ mã này, chúng tôi lấy dữ liệu trong một mảng được lập chỉ mục

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
3

Chúng tôi chọn tất cả dữ liệu từ bảng

$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
6

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
4

Chúng ta chuyển kiểu

$stm = $pdo->query("SELECT VERSION()");
1 cho phương thức
$stm = $pdo->query("SELECT VERSION()");
2

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
5

Chúng tôi đi qua mảng

$stm = $pdo->query("SELECT VERSION()");
3 và in các trường. Các trường được truy cập thông qua các chỉ mục mảng

Quảng cáo
DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
6

Trong ví dụ này, chúng tôi tìm nạp dữ liệu dưới dạng một mảng kết hợp

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
7

Trong phương pháp

$stm = $pdo->query("SELECT VERSION()");
2, chúng tôi sử dụng kiểu
$pdo = new PDO($dsn, $user, $passwd);
6

Các câu lệnh SQL thường được xây dựng động. Người dùng cung cấp một số đầu vào và đầu vào này được tích hợp vào câu lệnh. Chúng ta phải thận trọng mỗi khi xử lý thông tin đầu vào từ người dùng. Nó có một số ý nghĩa bảo mật nghiêm trọng. Cách được khuyến nghị để xây dựng động các câu lệnh SQL là sử dụng liên kết tham số

PDO chứa phương thức

$stm = $pdo->query("SELECT VERSION()");
6 và
$stm = $pdo->query("SELECT VERSION()");
7 để tạo các truy vấn được tham số hóa

PDO cho phép liên kết dữ liệu với dấu chấm hỏi hoặc trình giữ chỗ được đặt tên

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
8

Trong ví dụ này, chúng tôi sử dụng

$stm = $pdo->query("SELECT VERSION()");
7 để tạo truy vấn được tham số hóa. Chúng tôi sử dụng trình giữ chỗ dấu chấm hỏi

DROP TABLE IF EXISTS countries;
CREATE TABLE countries(id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255), population INT);

INSERT INTO countries(name, population) VALUES('China', 1382050000);
INSERT INTO countries(name, population) VALUES('India', 1313210000);
INSERT INTO countries(name, population) VALUES('USA', 324666000);
INSERT INTO countries(name, population) VALUES('Indonesia', 260581000);
INSERT INTO countries(name, population) VALUES('Brazil', 207221000);
INSERT INTO countries(name, population) VALUES('Pakistan', 196626000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Bangladesh', 162099000);
INSERT INTO countries(name, population) VALUES('Nigeria', 186988000);
INSERT INTO countries(name, population) VALUES('Russia', 146838000);
INSERT INTO countries(name, population) VALUES('Japan', 126830000);
9

Giả sử đầu vào này đến từ một người dùng

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
0

Câu lệnh select tìm nạp một hàng cụ thể từ bảng. Chúng tôi liên kết giá trị với

$stm = $pdo->query("SELECT VERSION()");
7 với một trình giữ chỗ có dấu chấm hỏi

Trong trường hợp thứ hai, chúng tôi sử dụng

$stm = $pdo->query("SELECT VERSION()");
6

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
1

Ví dụ chọn và in một hàng cụ thể

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
2

Lần này chúng tôi sử dụng trình giữ chỗ có tên (_______14_______1) và

$stm = $pdo->query("SELECT VERSION()");
6

PHP PDO Id hàng được chèn lần cuối

Phương thức PDO

$version = $stm->fetch();
3 trả về id hàng được chèn cuối cùng

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
3

Trong ví dụ này, chúng tôi tạo một bảng mới. Sau khi bảng được tạo, chúng tôi tìm ra Id được chèn cuối cùng với

$version = $stm->fetch();
3

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
4

Đây là đầu ra

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
5

Chúng tôi xác minh dữ liệu

Giao dịch PHP PDO

Giao dịch là một đơn vị nguyên tử của hoạt động cơ sở dữ liệu đối với dữ liệu trong một hoặc nhiều cơ sở dữ liệu. Tác động của tất cả các câu lệnh SQL trong một giao dịch có thể được cam kết hoàn toàn với cơ sở dữ liệu hoặc tất cả được khôi phục

PDO

$version = $stm->fetch();
5 bắt đầu một giao dịch mới. PDO
$version = $stm->fetch();
6 cam kết giao dịch. Và PDO
$version = $stm->fetch();
7 khôi phục giao dịch

Quảng cáo
query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
6

Trong ví dụ này, chúng tôi thêm hai quốc gia mới vào bảng cơ sở dữ liệu. Các câu lệnh chèn được đặt trong một giao dịch. cả hai phần chèn đều được thực thi hoặc không

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
7

Trong trường hợp có ngoại lệ, chúng tôi sẽ khôi phục giao dịch trở lại. không có dữ liệu được ghi vào cơ sở dữ liệu. Chúng tôi ném ngoại lệ để việc xử lý ngoại lệ tiếp tục theo cách thông thường

Siêu dữ liệu là thông tin về dữ liệu trong cơ sở dữ liệu. Siêu dữ liệu chứa thông tin về các bảng và cột mà chúng tôi lưu trữ dữ liệu trong đó. Số hàng mà câu lệnh SQL ảnh hưởng là siêu dữ liệu. Số lượng hàng và cột được trả về trong tập hợp kết quả cũng là siêu dữ liệu

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
8

Trong ví dụ, chúng ta in số cột trong tập kết quả bằng phương thức

$version = $stm->fetch();
8

Phương thức

$version = $stm->fetch();
9 truy xuất thuộc tính kết nối cơ sở dữ liệu

kết nối_thuộc tính. php

query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;
9

Trong ví dụ, chúng tôi lấy tên trình điều khiển, phiên bản máy chủ và chế độ tự động cam kết với phương pháp

$version = $stm->fetch();
9

$dsn = "mysql:host=localhost;dbname=mydb";
$user = "user12";
$passwd = "12user";
0

Đây là một đầu ra mẫu

quảng cáo

Trong ví dụ sau, chúng tôi in siêu dữ liệu cột. Siêu dữ liệu cột được truy xuất bằng phương thức

echo $version[0] . PHP_EOL;
1

Làm thế nào PHP được kết nối bằng PDO?

PDO đại diện cho kết nối giữa PHP và máy chủ cơ sở dữ liệu . PDOStatement đại diện cho một câu lệnh đã chuẩn bị và sau khi câu lệnh được thực thi, một tập hợp kết quả được liên kết. PDOException đại diện cho một lỗi do PDO đưa ra.

Tại sao PDO được sử dụng trong PHP?

PDO đề cập đến Đối tượng dữ liệu PHP, là một phần mở rộng PHP xác định giao diện nhẹ và nhất quán để truy cập cơ sở dữ liệu trong PHP. Nó là một tập hợp các phần mở rộng PHP cung cấp lớp PDO cốt lõi và trình điều khiển dành riêng cho cơ sở dữ liệu

Làm cách nào để cài đặt PDO cho PHP?

Pdo ( Đối tượng dữ liệu di động ) cần được cài đặt nếu nó chưa được thực hiện trước đó. Đối với nền tảng windows đi tới bảng điều khiển > Thêm chương trình xóa (hoặc Chương trình và tính năng) > Chọn cài đặt PHP của bạn và nhấp vào Thay đổi . Nếu bạn đang cài đặt PHP mới thì trong trình hướng dẫn thiết lập, bạn có thể chọn PDO từ liên kết Tiện ích mở rộng.

PDO được giới thiệu trong PHP khi nào?

Vào 1 tháng 7 năm 2004 , PHP 5 được phát hành, chạy trên Zend Engine II mới. PHP 5 bao gồm các tính năng mới như hỗ trợ cải tiến cho lập trình hướng đối tượng, phần mở rộng Đối tượng dữ liệu PHP (PDO) (xác định giao diện nhẹ và nhất quán để truy cập cơ sở dữ liệu) và nhiều cải tiến về hiệu suất.