(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.
optionsMả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.
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 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.
$options0
Thông số
$options1
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).
$options2
$options3
$options4
$options5
$options6
$options7Cá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).
$options8
$options9
??0
??1
??2
$options7Cá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
$options7Ví 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
$options7Ví 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();
?>
query0
query1
query2
query3
$options7Ví 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
query5
query6
query7
query8
query9
$options7Xem 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
options1
options2
options3
options4
options5PDO :: 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();
?>
options6
options7
options8
options3
PDO::ATTR_CURSOR0
PDO::ATTR_CURSOR1Ví 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_CURSOR2
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_CURSOR3
PDO::ATTR_CURSOR4
PDO::ATTR_CURSOR5
$options7Xem 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_CURSOR7
PDO::ATTR_CURSOR8
PDO::ATTR_CURSOR9
$options7Cá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_SCROLL1
PDO::CURSOR_SCROLL2
$options7AK_9JSZ ¶ ¶
14 năm trước
PDO::CURSOR_SCROLL4
PDO::CURSOR_SCROLL5
PDO::CURSOR_SCROLL6
options3
PDO::CURSOR_SCROLL8
PDO::CURSOR_SCROLL9roth tại egotec dot com ¶ ¶
16 năm trước
false0
false1
false2
false3
false4
$options7Omidbahrami1990 tại Gmail Dot Com ¶ ¶
4 năm trước
false6
false7
false8Jesse Dot Chisholm tại Gmail Dot Com ¶ ¶
7 năm trước
false9
<?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
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
sgirard tại rossprint dot com ¶ ¶
12 năm trước
$options01
$options02
$options03
$options04
$options7Kjetil h ¶ ¶
9 năm trước
$options06
$options07
$options08
$options7Pascal Dot Buguet tại Lapostte Dot Net ¶ ¶
12 năm trước
$options10
Kjetil h ¶ ¶
16 năm trước
$options11
$options12
$options13
$options14
$options15
$options7Omidbahrami1990 tại Gmail Dot Com ¶ ¶
4 năm trước
$options17
$options18
$options19
$options20
$options21Jesse Dot Chisholm tại Gmail Dot Com ¶ ¶
14 năm trước
$options22
$options23
$options24
$options25
$options26
$options77 năm trước ¶
7 năm trước
$options28
$options29
$options30
$options7Johniskew ¶ ¶
15 năm trước
$options32
$options33
$options34
$options7