PHP PDO SELECT truy vấn với các tham số

PDO (Đối tượng dữ liệu PHP), là lớp truy cập cơ sở dữ liệu cung cấp các phương thức thống nhất cho nhiều cơ sở dữ liệu. Một trong những lợi ích của việc sử dụng PDO trái ngược với MySQLi là nó hỗ trợ 12 trình điều khiển hệ thống cơ sở dữ liệu khác nhau. Một lợi ích khác của PDO là nó có một lớp ngoại lệ để xử lý các lỗi có thể xảy ra trong truy vấn cơ sở dữ liệu

Show

Ghi chú. Hướng dẫn này giả định rằng bạn có một máy chủ web cục bộ chạy bằng PHP và MySQL. Nó có thể là WAMP, MAMP hoặc XAMPP

Báo cáo đã chuẩn bị là gì?

Một câu lệnh đã chuẩn bị là một mẫu truy vấn SQL được tạo với các giá trị tham số thực tế bị bỏ qua và được gửi tới cơ sở dữ liệu. Cơ sở dữ liệu phân tích cú pháp, biên dịch và thực hiện tối ưu hóa truy vấn trên mẫu câu lệnh, sau đó lưu trữ kết quả mà không thực hiện nó

Sau đó, ứng dụng sẽ liên kết các giá trị thực với các tham số và thực thi câu lệnh. Ứng dụng có thể thực thi câu lệnh nhiều lần nếu cần với các giá trị khác nhau

PHP PDO SELECT truy vấn với các tham số
Tuyên bố chuẩn bị Pdo

Ưu điểm của việc sử dụng báo cáo đã chuẩn bị

Báo cáo chuẩn bị có những lợi thế sau

  • Việc phân tích truy vấn chỉ được thực hiện một lần, mặc dù câu lệnh có thể được thực hiện nhiều lần. Điều này làm giảm thời gian phân tích cú pháp của câu lệnh đã chuẩn bị
  • Tại thời điểm thực hiện, chỉ các giá trị tham số ràng buộc được gửi đến máy chủ (vì câu lệnh truy vấn đã được phân tích cú pháp và lưu trữ trong cơ sở dữ liệu), giảm thiểu việc sử dụng băng thông
  • Tuyên bố đã chuẩn bị bảo vệ chống lại SQL injection. Các giá trị tham số được gửi đến máy chủ một cách riêng biệt bằng một giao thức khác, do đó không thể can thiệp vào

SQL injection là một lỗ hổng bảo mật web, trong đó kẻ tấn công đặt mã độc hại vào các truy vấn mà ứng dụng thực hiện đối với cơ sở dữ liệu của nó, sử dụng biểu mẫu nhập liệu. Điều này cho phép kẻ tấn công có quyền truy cập trái phép vào dữ liệu nhạy cảm, sửa đổi hoặc xóa tài nguyên dữ liệu hoặc gây ra hành vi bất thường của chính ứng dụng

Tạo kết nối PDO

Trước khi bạn có thể truy cập tài nguyên cơ sở dữ liệu, bạn cần kết nối với cơ sở dữ liệu. Một kết nối PDO có cú pháp sau

try{ 
	$conn = new PDO("mysql:host=localhost;dbname=mydatabase;charset=utf8mb4","username","password");
	//Set PDO error mode to exception
	$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
	echo "Failed to connect". $e->getMessage();
}

PDO chỉ định hệ thống cơ sở dữ liệu (

//Create database hrm
CREATE DATABASE hrm;
4 trong trường hợp của chúng tôi), tên máy chủ (
//Create database hrm
CREATE DATABASE hrm;
5), tên cơ sở dữ liệu (
//Create database hrm
CREATE DATABASE hrm;
6),
//Create database hrm
CREATE DATABASE hrm;
7 và
//Create database hrm
CREATE DATABASE hrm;
8 (
//Create database hrm
CREATE DATABASE hrm;
9 là tùy chọn)

Đặt các thuộc tính

CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
0 và
CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
1 đang yêu cầu PDO đưa ra một ngoại lệ trong trường hợp nó gặp lỗi kết nối cơ sở dữ liệu

Nên tạo một tệp riêng chứa thông tin đăng nhập cơ sở dữ liệu của bạn hoặc đối tượng kết nối PDO và đặt nó bên ngoài thư mục chung. Không ai được truy cập tệp đó qua giao thức http

Để bắt đầu, hãy tạo một cơ sở dữ liệu có tên

CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
2 và một bảng
CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
3 trong đó. Bạn có thể sử dụng phpmyadmin hoặc MySQL Workbench để làm việc này

//Create database hrm
CREATE DATABASE hrm;

Tạo bảng

CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
3 với các trường sau trong cơ sở dữ liệu
CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
2

CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);

Với cơ sở dữ liệu và bảng tại chỗ, chúng tôi sẽ tạo tệp kết nối PDO với mã bên dưới

//Create database hrm
CREATE DATABASE hrm;
5

Thay đổi

CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
6 và
CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
7 thành những cái bạn đã sử dụng để tạo cơ sở dữ liệu

Lưu tệp này với tên

CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
8. Chúng ta sẽ cần nó sau

Chèn bản ghi bằng câu lệnh đã chuẩn bị

Câu lệnh truy vấn đã chuẩn bị của chúng ta sẽ giống như bên dưới

//Create database hrm
CREATE DATABASE hrm;
9

Chúng tôi đã gán câu lệnh truy vấn của mình cho một biến ________ 79. Biến

//Create database hrm
CREATE DATABASE hrm;
50 lưu trữ đối tượng kết nối PDO mà chúng ta đã tạo trước đó, từ đó truy cập các phương thức trong đối tượng.
//Create database hrm
CREATE DATABASE hrm;
51 là một biến khác nắm bắt kết quả của câu lệnh đã chuẩn bị. Nó giúp chúng tôi không lặp lại
//Create database hrm
CREATE DATABASE hrm;
52 trong các dòng mã tiếp theo

PDO hỗ trợ hai trình giữ chỗ vị trí.

//Create database hrm
CREATE DATABASE hrm;
53 ẩn danh và giữ chỗ có tên bắt đầu bằng
//Create database hrm
CREATE DATABASE hrm;
54

Bạn cũng có thể viết lại câu truy vấn trên như

//Create database hrm
CREATE DATABASE hrm;
6

Sau khi chuẩn bị câu lệnh truy vấn, bạn cần ràng buộc các tham số. Có hai cách để làm điều đó. bindParam hoặc bindValue

bindParam so với bindValueCả //Create database hrm CREATE DATABASE hrm; 55 và //Create database hrm CREATE DATABASE hrm; 56 đều là các hàm PHP có sẵn, được sử dụng để truy cập các bản ghi bằng cách ánh xạ một biến thành giá trị trong PDOStatement. Cả hai phương pháp đều có thể được sử dụng để liên kết một biến với một tham số cho dù là //Create database hrm CREATE DATABASE hrm; 53 ẩn danh hay được đặt tên là //Create database hrm CREATE DATABASE hrm; 54Tuy nhiên, //Create database hrm CREATE DATABASE hrm; 55 liên kết riêng một tham số với một tên biến đã chỉ định, được liên kết dưới dạng tham chiếu và sẽ được đánh giá tại thời điểm phương thức //Create database hrm CREATE DATABASE hrm; 90 được gọi. Mặt khác, //Create database hrm CREATE DATABASE hrm; 56 liên kết một giá trị có thể là biến, số nguyên hoặc chuỗi với tham số và được đánh giá tại thời điểm khai báoVới //Create database hrm CREATE DATABASE hrm; 55, bạn chỉ có thể truyền biến;

Tham số ràng buộc

Với mục đích của bài viết này, tôi sẽ sử dụng

//Create database hrm
CREATE DATABASE hrm;
55 và một số biến thể về cách thực hiện

//Create database hrm
CREATE DATABASE hrm;
7

Như bạn có thể thấy từ đoạn mã trên, chúng tôi đang chuyển các biến, các giá trị thực tế sẽ đến từ các trường đầu vào của một biểu mẫu. Chúng tôi sẽ tạo biểu mẫu đó ngay

Tiếp theo, chúng ta sẽ gọi phương thức

//Create database hrm
CREATE DATABASE hrm;
90 sẽ đăng các giá trị lên cơ sở dữ liệu

//Create database hrm
CREATE DATABASE hrm;
9

Tệp PHP để xử lý gửi biểu mẫu

Bây giờ, chúng tôi cần một biểu mẫu HTML để nhập dữ liệu một cách thuận tiện để gửi. Chúng tôi cũng sẽ cần nhúng tập lệnh PHP để xử lý dữ liệu và đăng nó lên cơ sở dữ liệu. Dưới đây là tất cả mã chúng ta cần để làm điều đó

//Create database hrm
CREATE DATABASE hrm;
0

Mã này có ba phần. đầu tiên, là mã PHP, sau đó là các kiểu CSS được nhúng và cuối cùng là mã biểu mẫu HTML. Bạn sẽ nhận thấy tôi đã bao gồm tệp

CREATE TABLE employees ( 
	emp_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
	firstname VARCHAR(30) NOT NULL, 
	lastname VARCHAR(30) NOT NULL,
	sex CHAR(6) NOT NULL, 
	email VARCHAR(50)
);
8 để mở kết nối

Lưu tệp với tên

//Create database hrm
CREATE DATABASE hrm;
97, trong cùng thư mục với tệp khác

Sau đó, mở

//Create database hrm
CREATE DATABASE hrm;
97 trong trình duyệt và sử dụng biểu mẫu để nhập lần lượt các nhân viên sau

//Create database hrm
CREATE DATABASE hrm;
4

Nếu bạn thực hiện đúng các bước, bây giờ bạn sẽ có ba bản ghi trong cơ sở dữ liệu của mình

Tôi sẽ không sử dụng một biểu mẫu để chỉ cho bạn cách CHỌN, CẬP NHẬT và XÓA các bản ghi với các câu lệnh đã chuẩn bị sẵn. tôi để đó cho bạn. Tất cả đều giống nhau, tôi sẽ chỉ cho bạn cách tạo các câu lệnh đã chuẩn bị để hoàn thành các tác vụ này

Chọn Bản ghi bằng Tuyên bố đã Chuẩn bị

Giả sử chúng ta chỉ muốn chọn hồ sơ của nhân viên nữ. Truy vấn chọn sẽ trông giống như bên dưới

//Create database hrm
CREATE DATABASE hrm;
0

Bạn sẽ nhận thấy rằng tôi đã chuyển trực tiếp câu lệnh

//Create database hrm
CREATE DATABASE hrm;
99 vào phương thức
//Create database hrm
CREATE DATABASE hrm;
60, thay vì sử dụng một biến như tôi đã làm trước đó. Đó chỉ là để rút ngắn các dòng mã

Cập nhật Bản ghi bằng Tuyên bố Đã chuẩn bị

Giả sử chúng tôi cho phép người dùng cập nhật tài khoản của họ, tất nhiên là sử dụng biểu mẫu và Lucy muốn thay đổi họ và email của mình thành

//Create database hrm
CREATE DATABASE hrm;
61 và
//Create database hrm
CREATE DATABASE hrm;
62. Tôi nghi ngờ cô ấy đã kết hôn

//Create database hrm
CREATE DATABASE hrm;
1

Lưu ý, tôi đã chuyển một mảng input_parameters,

//Create database hrm
CREATE DATABASE hrm;
63 làm đối số trong
//Create database hrm
CREATE DATABASE hrm;
90 thay vì ràng buộc chúng riêng lẻ. Đó là một cách khác để làm điều đó

Xóa bản ghi bằng câu lệnh đã chuẩn bị

Từ các phần trước, việc xóa bản ghi rất đơn giản. Lưu ý duy nhất là bạn phải sử dụng mệnh đề WHERE nếu không bạn sẽ nhận được một bảng trống. Tôi không nghĩ đó là những gì bạn muốn, nhưng tôi có thể sai. (đùa thôi. ) Hãy xóa kỷ lục của Lucy

//Create database hrm
CREATE DATABASE hrm;
2

ID được chèn lần cuối

Đôi khi, bạn có thể muốn lấy

//Create database hrm
CREATE DATABASE hrm;
65 của bản ghi được chèn lần cuối để xử lý thêm. PDO sử dụng phương pháp
//Create database hrm
CREATE DATABASE hrm;
66 để lấy nó

Hãy nhập một nhân viên mới tên là Samira Hassan, một phụ nữ có email là [email được bảo vệ]

//Create database hrm
CREATE DATABASE hrm;
3

Tôi nghĩ rằng việc sử dụng một mảng input_parameters có thể rút ngắn mã của bạn, đặc biệt nếu bạn có nhiều tham số để liên kết. Tất cả các giá trị trong mảng được coi là PDO. PARAM_STR. Tuy nhiên, mảng phải có nhiều tham số ràng buộc như trong câu lệnh SQL, nếu không một ngoại lệ sẽ được đưa ra

Phần kết luận

Chỉ để nhắc nhở bạn, tôi đã không sử dụng xác thực biểu mẫu trong các ví dụ trên. Khi sử dụng biểu mẫu html trong môi trường sản xuất, bạn cần vệ sinh và xác thực dữ liệu. Nếu có thể ở front-end và back-end

Nếu quan tâm, bạn có thể xem các bài viết trước của tôi. xác thực biểu mẫu html5, xác thực biểu mẫu trong JavaScript hoặc khử trùng biểu mẫu phía máy chủ. Những bài viết này nêu bật một số kỹ thuật xác thực mà bạn có thể sử dụng

Làm cách nào để chọn trong PDO PHP?

Truy vấn CHỌN không có tham số . $stmt = $pdo->query("SELECT * FROM users"); Điều này sẽ cung cấp cho chúng ta một đối tượng $stmt có thể được sử dụng để tìm nạp .

Làm cách nào để viết truy vấn SQL trong PDO?

Để chuẩn bị và thực thi một câu lệnh SQL không chấp nhận tham số đầu vào, hãy sử dụng PDO. exec hoặc PDO. phương thức truy vấn . Sử dụng PDO. exec để thực thi một câu lệnh không trả về tập kết quả nào. Sử dụng PDO. phương thức truy vấn để thực thi một câu lệnh trả về một hoặc nhiều tập kết quả.

Làm cách nào để thực hiện nhiều truy vấn chọn trong PHP?

Nhiều câu lệnh hoặc nhiều truy vấn phải được thực thi với mysqli. multi_query() . Các câu lệnh riêng lẻ của chuỗi câu lệnh được phân tách bằng dấu chấm phẩy. Sau đó, tất cả các tập kết quả được trả về bởi các câu lệnh đã thực hiện phải được tìm nạp.

Làm cách nào để tìm nạp nhiều hàng từ cơ sở dữ liệu trong PHP?

Lấy nhiều hàng từ cơ sở dữ liệu php .
$sql = "CHỌN tên mặt hàng, mô tả, giá TỪ các mặt hàng Ở ĐÂU itemid = '". $itemID. "'";
$result = $conn->query($sql);
nếu($result->num_rows > 0)
// Lưu trữ giá vật phẩm
// lấy giá trị ở hàng "price"
$itemPrice = $result->fetch_assoc()["price"];
tiếng vang $itemprice;