2011-10-27 6 views
1

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

Для чего необходимо установить соединение с использованием метода PDO :: quote, и его можно избежать?

ответ

1

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

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

+0

Я знаю, что не имеет смысла говорить об экранировании в вакууме, но для установления связи с БД просто для цитирования кажется излишним. Я понимаю, что ему нужны параметры db, но они находятся в конструкторе PDO. Я использую postgresql ... Я думаю, что я буду использовать настраиваемую цитату, когда соединение еще не создано –

1

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

0

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