(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.1)
PDO::quote — 將字串加上引號,以便在查詢中使用
PDO::quote() 會根據底層驅動程式的適當引號樣式,在輸入字串的周圍加上引號(如果需要),並跳脫輸入字串中的特殊字元。
如果您使用此函數來建構 SQL 陳述式,強烈建議您使用 PDO::prepare() 來準備具有繫結參數的 SQL 陳述式,而不是使用 PDO::quote() 將使用者輸入插入到 SQL 陳述式中。 具有繫結參數的預備陳述式不僅更具可攜性、更方便,而且可以避免 SQL 注入攻擊,而且執行速度通常比插入查詢快得多,因為伺服器端和用戶端都可以快取查詢的已編譯形式。
並非所有 PDO 驅動程式都實作此方法(尤其是 PDO_ODBC)。請考慮改用預備陳述式。
必須在伺服器層級或資料庫連線本身內設定字元集(取決於驅動程式),才能影響 PDO::quote()。詳情請參閱特定驅動程式的說明文件。
string(字串)
要被引號括住的字串。
type(類型)
為具有替代引號樣式的驅動程式提供資料類型的提示。例如,PDO_PARAM_LOB
會告知驅動程式轉義二進位資料。
回傳一個理論上可以安全地傳遞到 SQL 陳述式的引號括住的字串。如果驅動程式不支援這種引號方式,則回傳 false
。
範例 #1 引號括住一般字串
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');
/* 簡單字串 */
$string = 'Nice';
print "未引號括住的字串: $string\n";
print "引號括住的字串: " . $conn->quote($string) . "\n";
?>
上述範例將輸出
Unquoted string: Nice Quoted string: 'Nice'
範例 #2 引號括住危險字串
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');
/* 危險字串 */
$string = 'Naughty \' string';
print "未引號括住的字串: $string\n";
print "引號括住的字串: " . $conn->quote($string) . "\n";
?>
上述範例將輸出
Unquoted string: Naughty ' string Quoted string: 'Naughty '' string'
範例 #3 引號括住複雜字串
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');
/* 複雜字串 */
$string = "Co'mpl''ex \"st'\"ring";
print "未引號括住的字串: $string\n";
print "引號括住的字串: " . $conn->quote($string) . "\n";
?>
上述範例將輸出
Unquoted string: Co'mpl''ex "st'"ring Quoted string: 'Co''mpl''''ex "st''"ring'