首頁 >後端開發 >PHP問題 >php中prerare如何運用

php中prerare如何運用

小老鼠
小老鼠原創
2023-05-10 17:15:241525瀏覽

在php中prerare的用法是“PDO::prepare”,表示準備要執行的語句,並返回語句對象,其使用語法如“public PDO::prepare(string $statement, array $driver_options = array())」。

php中prerare如何運用

本教學作業系統: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 = &#39;SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour&#39;;
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(&#39;:calories&#39; => 150, &#39;:colour&#39; => &#39;red&#39;));
$red = $sth->fetchAll();
$sth->execute(array(&#39;:calories&#39; => 175, &#39;:colour&#39; => &#39;yellow&#39;));
$yellow = $sth->fetchAll();
?>

範例#2問號形式的SQL語句範本

<?php
/* 传入数组的值,并执行准备好的语句 */
$sth = $dbh->prepare(&#39;SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?&#39;);
$sth->execute(array(150, &#39;red&#39;));
$red = $sth->fetchAll();
$sth->execute(array(175, &#39;yellow&#39;));
$yellow = $sth->fetchAll();
?>

以上是php中prerare如何運用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn