quote()

1. 定义

该方法为 SQL 查询字符串中需要的部分添加引号,并对特殊字符进行转义。

注:

  • 并非所有数据库驱动都实现了该功能(如PDO_ODBC
  • 建议使用PDO::prepare()预处理语句处理 SQL 参数,而不是使用PDO::quote()进行拼接

2. 语法

public PDO::quote ( string $string [, int $parameter_type = PDO::PARAM_STR ] ) : string

3. 参数说明

参数 可选性 数据类型 描述
$string 必需 字符串 SQL 字符串
$parameter_type 可选 整型或常量 提示数据库驱动数据类型,以便其选择引号风格

4. 示例

<?php

// PDO::quote()
// 为 SQL 查询字符串中需要的部分添加引号,并对特殊字符进行转义

try {
    $config = ['driver' => 'mysql', 'host' => 'localhost', 'dbname' => 'test', 'charset' => 'utf8', 'user' => 'root', 'pwd' => 'mysql'];
    $dsn = sprintf('%s:host=%s;dbname=%s;charset=%s', $config['driver'], $config['host'], $config['dbname'], $config['charset']);
    $conn = new PDO($dsn, $config['user'], $config['pwd']);

    $sql = "select 'name','gender' from user where name='jisu'";
    echo $conn->quote($sql),"\n";// 输出:'select \'name\',\'gender\' from user where name=\'jisu\''

    $sql = "delete from user where profile='NULL'";
    echo $conn->quote($sql),"\n";// 输出:'delete from user where profile=\'NULL\''

    $sql = "UPDATE \'user\' SET `name` = 'jisu' WHERE `id` = 1";
    echo $conn->quote($sql),"\n";// 输出:'UPDATE \\\'user\\\' SET `name` = \'jisu\' WHERE `id` = 1'

} catch (PDOException $e) {
    error_log($e->getMessage()); // 将错误信息记录至日志
    echo $e->getMessage();
}
/* 
可以看到 PDO::quote() 方法给字符串加上了一对引号,并给部分特殊字符转义

'select \'name\',\'gender\' from user where name=\'jisu\''
'delete from user where profile=\'NULL\''
'UPDATE \\\'user\\\' SET `name` = \'jisu\' WHERE `id` = 1'
*/

5. 延展阅读