有没有一种方法可以使用PHP PDO::quote方法而不创建连接?


Is there a way of using PHP PDO::quote method without creating a connection?

我一直在使用PDO::quote来生成SQL语句。我使用生成的SQL创建一个memcached键。我希望避免仅仅为了转义SQL值而创建连接。

需要建立连接来使用PDO::quote方法的目的是什么,可以避免吗?

因为PDO是一个抽象层,每个数据库的引用方法不同。PDO必须知道你要使用哪个数据库才能使用正确的引用/转义API调用

需要一个连接,因为转义变量的概念只有在要转义的数据库连接上下文中才有意义。不同的字符可能有不同的解释,比如MySQL和PostgreSQL,或者取决于连接的字符集。因此,在真空中讨论转义变量是没有意义的,您需要对如何解释结果字符串有一些概念。

如果你知道SQL将要使用的驱动程序,只需编写一个自己的函数,例如

/**
 * @param {string|int|null} $data
 * @return string
 */
function quote ($data) {
    if (is_float($data) || is_int($data)) {
        return $data;
    } else if (is_string($data)) {
        return '''' . addslashes($data) . '''';
    } else if ($data) {
        throw new Exception('Invalid data type.');
    } else {
        return 'NULL';
    }
}

示例用例:您有一个CLI程序,用于生成SQL代码,该代码稍后将由另一个程序执行。在这个场景中,建立MySQL连接是多余的,可能是不必要的。