有没有办法在不创建连接的情况下使用PHP PDO :: quote方法?

时间:2011-10-27 16:54:00

标签: php pdo quote

我一直在使用PDO::quote来生成SQL语句。我使用生成的SQL来创建memcached密钥。我想避免仅为了逃避SQL值而创建连接。

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

3 个答案:

答案 0 :(得分:1)

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

也许你可以使用别的东西作为memcached的关键。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果您知道将要使用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连接是多余的,可能是不需要的。