Есть ли способ использовать метод PHP PDO :: quote без создания соединения? - PullRequest
1 голос
/ 27 октября 2011

Я использовал PDO :: quote для генерации операторов SQL. Я использую сгенерированный SQL для создания ключа memcached. Я хотел бы избежать создания соединения исключительно с целью экранирования значений SQL.

Какова цель установления соединения для использования метода PDO :: quote и можно ли этого избежать?

Ответы [ 3 ]

1 голос
/ 27 октября 2011

Поскольку PDO - это уровень абстракции, и методы цитирования каждой базы данных различаются. PDO должен знать, какую базу данных вы собираетесь использовать, чтобы иметь возможность использовать правильное цитирование / экранирование вызовов API.

1 голос
/ 15 июня 2015

Если вы знаете драйвер, с которым будет использоваться 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 является избыточным и может быть нежелательным.

1 голос
/ 27 октября 2011

Вам необходимо соединение, потому что понятие экранирования переменных имеет смысл только в контексте соединения с базой данных, относительно которого они должны быть экранированы. Различные символы могут интерпретироваться по-разному, скажем, MySQL и PostgreSQL, или в зависимости от набора символов соединения. Поэтому не имеет смысла говорить о экранировании переменных в вакууме, вам нужно некоторое представление о том, как будет интерпретироваться полученная строка.

Может быть, вы могли бы использовать что-то еще в качестве ключа для memcached.

...