我一直在使用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连接是多余的,可能是不必要的。