2

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

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

4

3 回答 3

2

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

于 2011-10-27T16:58:40.210 回答
1

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

也许您可以使用其他东西作为 memcached 的键。

于 2011-10-27T16:58:30.167 回答
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 连接是多余的,并且可能是不需要的。

于 2015-06-15T19:00:23.847 回答