(Php 5> = 5.1.0, Php 7, Php 8, Php 8, Pecl PDO> = 0.1.0)
PDO :: Chuẩn bị - Chuẩn bị một tuyên bố để thực thi và trả về một đối tượng câu lệnh — Prepares a statement for execution and returns a statement object
Sự mô tả
publicPdo :: chuẩn bị (chuỗi $query
, mảng $options
= []): pdostatement | false PDO::prepare(string $query
, array $options
= []):
PDOStatement|false
Bạn phải bao gồm một điểm đánh dấu tham số duy nhất cho mỗi giá trị bạn muốn chuyển vào câu lệnh khi bạn gọi pDostatement :: exec (). Bạn không thể sử dụng một điểm đánh dấu tham số có tên cùng tên nhiều lần trong một câu lệnh đã chuẩn bị, trừ khi chế độ mô phỏng được bật.PDOStatement::execute(). You cannot use a named parameter marker of the same name more than once in a prepared statement, unless
emulation mode is on.
Ghi chú::
Điểm đánh dấu tham số chỉ có thể thể hiện một dữ liệu hoàn chỉnh theo nghĩa đen. Cả một phần của từ khóa, cũng không phải từ khóa, cũng như định danh, cũng như bất kỳ phần truy vấn tùy ý nào cũng có thể bị ràng buộc bằng các tham số. Ví dụ: bạn không thể liên kết nhiều giá trị với một tham số duy nhất trong mệnh đề in () của câu lệnh SQL.
Gọi PDO :: Prepar () và pDostatement :: exec () cho các câu lệnh sẽ được phát hành nhiều lần với các giá trị tham số khác nhau tối ưu hóa hiệu suất của ứng dụng của bạn bằng cách cho phép người lái xe đàm phán và/hoặc bộ nhớ đệm phía máy chủ của kế hoạch truy vấn và Thông tin meta. Ngoài ra, gọi pdo :: Prepar () và pDostatement :: exce () giúp ngăn chặn các cuộc tấn công tiêm SQL bằng cách loại bỏ nhu cầu được báo giá và thoát khỏi các tham số.PDO::prepare() and
PDOStatement::execute() for statements that will be issued multiple times with different parameter values optimizes the performance of your application by allowing the driver to negotiate client and/or server side caching of the query plan and meta information. Also, calling PDO::prepare() and
PDOStatement::execute() helps to prevent SQL injection attacks by eliminating the need to manually quote and escape the parameters.
PDO sẽ mô phỏng các câu lệnh/tham số ràng buộc đã chuẩn bị cho các trình điều khiển không hỗ trợ chúng và cũng có thể viết lại các điểm đánh dấu tham số kiểu đánh dấu hoặc câu hỏi cho một cái gì đó phù hợp hơn, nếu trình điều khiển hỗ trợ một kiểu nhưng không phải theo kiểu khác.
Lưu ý: Trình phân tích cú pháp được sử dụng cho các câu lệnh được chuẩn bị được mô phỏng và để viết lại các tham số kiểu đánh dấu có tên hoặc câu hỏi hỗ trợ thoát khỏi dấu gạch chéo ngược tiêu chuẩn cho các trích dẫn đơn và đôi. Điều đó có nghĩa là việc chấm dứt các trích dẫn ngay lập tức được đặt ra bởi một dấu gạch chéo ngược không được nhận ra như vậy, điều này có thể dẫn đến việc phát hiện sai các tham số khiến câu lệnh đã chuẩn bị bị lỗi khi nó được thực thi. Một công việc xung quanh là không sử dụng các chuẩn bị được mô phỏng cho các truy vấn SQL như vậy và để tránh viết lại các tham số bằng cách sử dụng kiểu tham số được trình điều khiển hỗ trợ tự nhiên.: The parser used for emulated prepared statements and for rewriting named or question mark style parameters supports the non standard backslash escapes for single- and double quotes. That means that terminating quotes immediately preceeded by a backslash are not recognized as such, which may result in wrong detection of parameters causing the prepared statement to fail when it is executed. A work-around is to not use emulated prepares for such SQL
queries, and to avoid rewriting of parameters by using a parameter style which is natively supported by the driver.
Kể từ Php 7.4.0, các dấu hỏi có thể được thoát ra bằng cách nhân đôi chúng. Điều đó có nghĩa là chuỗi ??
sẽ được dịch thành ?
khi gửi truy vấn đến cơ sở dữ liệu.
Thông số
query
Đây phải là một mẫu câu lệnh SQL hợp lệ cho máy chủ cơ sở dữ liệu đích.
options
Mảng này chứa một hoặc nhiều cặp giá trị => để đặt các giá trị thuộc tính cho đối tượng pdostatement mà phương thức này trả về. Bạn thường sử dụng điều này để đặt giá trị PDO::ATTR_CURSOR
thành PDO::CURSOR_SCROLL
để yêu cầu con trỏ có thể cuộn. Một số trình điều khiển có các tùy chọn dành riêng cho trình điều khiển có thể được đặt vào thời gian chuẩn bị.
Trả về giá trị
Nếu máy chủ cơ sở dữ liệu chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về một đối tượng pdostatement. Nếu máy chủ cơ sở dữ liệu không thể chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về false
hoặc phát ra PDOException (tùy thuộc vào xử lý lỗi).PDO::prepare() returns a PDOStatement object. If the database server cannot successfully prepare the statement, PDO::prepare() returns false
or emits PDOException (depending on
error handling).
Ghi chú::
Điểm đánh dấu tham số chỉ có thể thể hiện một dữ liệu hoàn chỉnh theo nghĩa đen. Cả một phần của từ khóa, cũng không phải từ khóa, cũng như định danh, cũng như bất kỳ phần truy vấn tùy ý nào cũng có thể bị ràng buộc bằng các tham số. Ví dụ: bạn không thể liên kết nhiều giá trị với một tham số duy nhất trong mệnh đề in () của câu lệnh SQL.PDO::prepare() does not check the statement.
PDO sẽ mô phỏng các câu lệnh/tham số ràng buộc đã chuẩn bị cho các trình điều khiển không hỗ trợ chúng và cũng có thể viết lại các điểm đánh dấu tham số kiểu đánh dấu hoặc câu hỏi cho một cái gì đó phù hợp hơn, nếu trình điều khiển hỗ trợ một kiểu nhưng không phải theo kiểu khác.
Lưu ý: Trình phân tích cú pháp được sử dụng cho các câu lệnh được chuẩn bị được mô phỏng và để viết lại các tham số kiểu đánh dấu có tên hoặc câu hỏi hỗ trợ thoát khỏi dấu gạch chéo ngược tiêu chuẩn cho các trích dẫn đơn và đôi. Điều đó có nghĩa là việc chấm dứt các trích dẫn ngay lập tức được đặt ra bởi một dấu gạch chéo ngược không được nhận ra như vậy, điều này có thể dẫn đến việc phát hiện sai các tham số khiến câu lệnh đã chuẩn bị bị lỗi khi nó được thực thi. Một công việc xung quanh là không sử dụng các chuẩn bị được mô phỏng cho các truy vấn SQL như vậy và để tránh viết lại các tham số bằng cách sử dụng kiểu tham số được trình điều khiển hỗ trợ tự nhiên.
Kể từ Php 7.4.0, các dấu hỏi có thể được thoát ra bằng cách nhân đôi chúng. Điều đó có nghĩa là chuỗi ??
sẽ được dịch thành ?
khi gửi truy vấn đến cơ sở dữ liệu.
$options
0
Thông số
$options
1
query
- Đây phải là một mẫu câu lệnh SQL hợp lệ cho máy chủ cơ sở dữ liệu đích.
-
options
- Mảng này chứa một hoặc nhiều cặp giá trị => để đặt các giá trị thuộc tính cho đối tượng pdostatement mà phương thức này trả về. Bạn thường sử dụng điều này để đặt giá trị
PDO::ATTR_CURSOR
thành PDO::CURSOR_SCROLL
để yêu cầu con trỏ có thể cuộn. Một số trình điều khiển có các tùy chọn dành riêng cho trình điều khiển có thể được đặt vào thời gian chuẩn bị.
Trả về giá trị ¶
Nếu máy chủ cơ sở dữ liệu chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về một đối tượng pdostatement. Nếu máy chủ cơ sở dữ liệu không thể chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về false
hoặc phát ra PDOException (tùy thuộc vào xử lý lỗi).
$options
2
$options
3
$options
4
$options
5
$options
6
$options
7 Các câu lệnh được chuẩn bị không được giao tiếp với máy chủ cơ sở dữ liệu, vì vậy pdo :: Prepar () không kiểm tra câu lệnh. ¶
Nếu máy chủ cơ sở dữ liệu chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về một đối tượng pdostatement. Nếu máy chủ cơ sở dữ liệu không thể chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về false
hoặc phát ra PDOException (tùy thuộc vào xử lý lỗi).
$options
8
$options
9
??
0
??
1
??
2
$options
7 Các câu lệnh được chuẩn bị không được giao tiếp với máy chủ cơ sở dữ liệu, vì vậy pdo :: Prepar () không kiểm tra câu lệnh. ¶
Ví dụ
??
4
Ví dụ #1 mẫu câu lệnh SQL có tham số được đặt tên ¶
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
??
5
??
6
??
7
??
8
??
9
?
0
$options
7 Ví dụ #2 mẫu câu lệnh SQL với các tham số đánh dấu câu hỏi ¶
Ví dụ
?
2
?
3
?
4
?
5
?
6
?
7
?
8
$options
7 Ví dụ #1 mẫu câu lệnh SQL có tham số được đặt tên ¶
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
query
0
query
1
query
2
query
3
$options
7
Ví dụ #2 mẫu câu lệnh SQL với các tham số đánh dấu câu hỏi ¶
Ví dụ #3 Mẫu câu lệnh SQL với dấu hỏi đã thoát
query
5
query
6
query
7
query
8
query
9
$options
7
Xem thêm ¶
PDO :: Exec () - Thực hiện câu lệnh SQL và trả về số lượng hàng bị ảnh hưởng
options
1
options
2
options
3
options
4
options
5 PDO :: Query () - Chuẩn bị và thực hiện câu lệnh SQL mà không có người giữ chỗ ¶
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
options
6
options
7
options
8
options
3
PDO::ATTR_CURSOR
0
PDO::ATTR_CURSOR
1 Ví dụ #2 mẫu câu lệnh SQL với các tham số đánh dấu câu hỏi ¶
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
PDO::ATTR_CURSOR
2
Ví dụ #2 mẫu câu lệnh SQL với các tham số đánh dấu câu hỏi ¶
Ví dụ #3 Mẫu câu lệnh SQL với dấu hỏi đã thoát
PDO::ATTR_CURSOR
3
PDO::ATTR_CURSOR
4
PDO::ATTR_CURSOR
5
$options
7 Xem thêm ¶
Nếu máy chủ cơ sở dữ liệu chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về một đối tượng pdostatement. Nếu máy chủ cơ sở dữ liệu không thể chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về false
hoặc phát ra PDOException (tùy thuộc vào xử lý lỗi).
PDO::ATTR_CURSOR
7
PDO::ATTR_CURSOR
8
PDO::ATTR_CURSOR
9
$options
7 Các câu lệnh được chuẩn bị không được giao tiếp với máy chủ cơ sở dữ liệu, vì vậy pdo :: Prepar () không kiểm tra câu lệnh. ¶
Nếu máy chủ cơ sở dữ liệu chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về một đối tượng pdostatement. Nếu máy chủ cơ sở dữ liệu không thể chuẩn bị thành công câu lệnh, PDO :: Prepar () trả về false
hoặc phát ra PDOException (tùy thuộc vào xử lý lỗi).
PDO::CURSOR_SCROLL
1
PDO::CURSOR_SCROLL
2
$options
7
AK_9JSZ ¶ ¶
14 năm trước
PDO::CURSOR_SCROLL
4
PDO::CURSOR_SCROLL
5
PDO::CURSOR_SCROLL
6
options
3
PDO::CURSOR_SCROLL
8
PDO::CURSOR_SCROLL
9 roth tại egotec dot com ¶ ¶
16 năm trước
false
0
false
1
false
2
false
3
false
4
$options
7 Omidbahrami1990 tại Gmail Dot Com ¶ ¶
4 năm trước
false
6
false
7
false
8 Jesse Dot Chisholm tại Gmail Dot Com ¶ ¶
7 năm trước
false
9
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
0
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
1
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
2
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
3
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
4
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
5
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
6
$options
7 Johniskew ¶ ¶
15 năm trước
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
8
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Array keys can be prefixed with colons ":" too (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
9
$options
7 sgirard tại rossprint dot com ¶ ¶
12 năm trước
$options
01
$options
02
$options
03
$options
04
$options
7 Kjetil h ¶ ¶
9 năm trước
$options
06
$options
07
$options
08
$options
7 Pascal Dot Buguet tại Lapostte Dot Net ¶ ¶
12 năm trước
$options
10
Kjetil h ¶ ¶
16 năm trước
$options
11
$options
12
$options
13
$options
14
$options
15
$options
7 Omidbahrami1990 tại Gmail Dot Com ¶ ¶
4 năm trước
$options
17
$options
18
$options
19
$options
20
$options
21 Jesse Dot Chisholm tại Gmail Dot Com ¶ ¶
14 năm trước
$options
22
$options
23
$options
24
$options
25
$options
26
$options
7
7 năm trước ¶
7 năm trước
$options
28
$options
29
$options
30
$options
7
Johniskew ¶ ¶
15 năm trước
$options
32
$options
33
$options
34
$options
7Tổng quan về các câu lệnh đã chuẩn bị Nếu bạn muốn thực thi một đối tượng câu lệnh nhiều lần, nó thường giảm thời gian thực hiện để sử dụng một đối tượng PreadStatement thay thế.Tính năng chính của một đối tượng PreadStatement là, không giống như một đối tượng câu lệnh, nó được đưa ra một câu lệnh SQL khi nó được tạo.If you want to execute a Statement object many times, it usually reduces execution time to use a PreparedStatement object instead. The main feature of a PreparedStatement object is that, unlike a Statement object, it is given a SQL statement when it is created.
PDO :: Chuẩn bị - Chuẩn bị một tuyên bố để thực thi và trả về một đối tượng câu lệnh.Prepares a statement for execution and returns a statement object.
Các câu lệnh được chuẩn bị cung cấp hai lợi ích chính: Truy vấn chỉ cần được phân tích cú pháp (hoặc chuẩn bị) một lần, nhưng có thể được thực thi nhiều lần với các tham số giống nhau hoặc khác nhau.Khi truy vấn được chuẩn bị, cơ sở dữ liệu sẽ phân tích, biên dịch và tối ưu hóa kế hoạch thực hiện truy vấn.The query only needs to be parsed (or prepared) once, but can be executed multiple times with the same or different parameters. When the query is prepared, the database will analyze, compile and optimize its plan for executing the query.
Chức năng Prepare () / mysqli_prepare () được sử dụng để chuẩn bị câu lệnh SQL để thực thi.to prepare an SQL statement for execution.