在php中prerare的用法是“PDO::prepare”,表示準備要執行的語句,並返回語句對象,其使用語法如“public PDO::prepare(string $statement, array $driver_options = array())」。
本教學作業系統:Windows10系統、PHP8.1.3版、Dell G3電腦。
php prepare的用法
PDO::prepare
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PHP 8 ,PECL pdo >= 0.1.0)
PDO::prepare — 準備要執行的語句,並傳回語句物件
說明
public PDO::prepare(string $statement, array $driver_options = array()): PDOStatement为 PDOStatement::execute() 方法准备待执行的 SQL 语句。 语句模板可以包含零个或多个参数占位标记,格式是命名(:name)或问号(?)的形式,当它执行时将用真实数据取代。 在同一个语句模板里,命名形式和问号形式不能同时使用;只能选择其中一种参数形式。 请用参数形式绑定用户输入的数据,不要直接字符串拼接到查询里。
呼叫PDOStatement::execute ()時,每一個值的參數佔位標記,名稱必須唯一。除非啟用模擬(emulation)模式,在同一個語句裡無法使用重名的參數。
注意:
參數佔位符只能字面上展示完整的資料。不能是字面的一部分,不能是關鍵字,不能是標識符,不能是其他任意的範圍。舉例說明:不能把多個值綁到單一參數裡,然後在SQL語句裡用IN()查詢。
如果用不同參數,透過PDO::prepare()和PDOStatement::execute() 多次呼叫同一個SQL語句,將提升應用程式的效能- 驅動程式可以讓客戶端/伺服器快取查詢和元資訊。同時,呼叫PDO::prepare() 與 PDOStatement::execute()還能阻止SQL注入攻擊,不需要為參數手動加引號與轉義。
如果內建驅動不支援參數,PDO將模擬出參數的功能;如果驅動僅支援其中一種風格(命名參數和問號參數兩種),也會自動重寫到另一種風格。
注意: 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.
參數
statement
必須是對目標資料庫伺服器有效的SQL語句範本。
driver_options
陣列包含一個或多個 key=>value 鍵值對,為傳回的PDOStatement物件設定屬性。常見用法是:設定PDO::ATTR_CURSOR為 PDO::CURSOR_SCROLL,將會得到可捲動的遊標。某些驅動有驅動級的選項,在prepare時設定。
傳回值
如果資料庫伺服器完成準備了語句, PDO::prepare()傳回PDOStatement物件。如果資料庫伺服器無法準備語句, PDO::prepare() 傳回false或拋出PDOException(取決於 錯誤處理器)。
注意:
模擬模式下的prepare語句不會和資料庫伺服器交互,所以PDO::prepare()不會檢查語句。
範例
範例#1命名參數形式的SQL語句範本
<?php /* 传入数组的值,并执行准备好的语句 */ $sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'; $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->execute(array(':calories' => 150, ':colour' => 'red')); $red = $sth->fetchAll(); $sth->execute(array(':calories' => 175, ':colour' => 'yellow')); $yellow = $sth->fetchAll(); ?>
範例#2問號形式的SQL語句範本
<?php /* 传入数组的值,并执行准备好的语句 */ $sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?'); $sth->execute(array(150, 'red')); $red = $sth->fetchAll(); $sth->execute(array(175, 'yellow')); $yellow = $sth->fetchAll(); ?>
以上是php中prerare如何運用的詳細內容。更多資訊請關注PHP中文網其他相關文章!