我一直在使用PDO::quote来生成SQL语句。我使用生成的SQL来创建memcached
密钥。我想避免仅为了逃避SQL值而创建连接。
需要建立连接以使用PDO :: quote方法的目的是什么?是否可以避免?
答案 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连接是多余的,可能是不需要的。