我一直在使用PDO::quote來生成SQL語句。我使用生成的SQL創建一個memcached
密鑰。我想避免僅僅爲了轉義SQL值而創建連接。有沒有使用PHP PDO :: quote方法而不創建連接的方法?
需要建立連接以使用PDO :: quote方法的目的是什麼?可以避免嗎?
我一直在使用PDO::quote來生成SQL語句。我使用生成的SQL創建一個memcached
密鑰。我想避免僅僅爲了轉義SQL值而創建連接。有沒有使用PHP PDO :: quote方法而不創建連接的方法?
需要建立連接以使用PDO :: quote方法的目的是什麼?可以避免嗎?
您需要一個連接,因爲轉義變量的概念只有在數據庫連接的上下文中才有意義,而且它們將被轉義。不同的字符可能會有不同的解釋,比如說MySQL和PostgreSQL,或者取決於連接的字符集。因此,在真空中談論逃避變量是沒有意義的,你需要一些關於如何解釋結果字符串的概念。
也許你可以使用別的東西作爲memcached的關鍵。
由於PDO是一個抽象層,每個數據庫的引用方法都不相同。 PDO必須知道您將使用的WHICH數據庫才能使用正確的引用/轉義API調用。
如果您知道將與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連接是多餘的,可能是不需要的。
我知道在真空中談論逃避是沒有意義的,但是爲了引用而引用數據庫的連接似乎是一種矯枉過正。我知道它需要db參數,但這些都在PDO構造函數中。我正在使用postgresql ...我想我會在連接尚未創建時使用自定義引用 –