Начиная с версии PHP 4.3.0, функция mysql_escape_string() считается устаревшей. PHP будет выдавать соответствующее предупреждение.
Deprecated function: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead.
Т.е. рекомендуется использовать вместо неё — mysql_real_escape_string(). Но та в свою очередь также устарела, начиная с версии PHP 5.5.
Deprecated function: mysql_real_escape_string(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead.
Т.е. если вы используете PHP версии 5.6 и выше, то рекомендуется использовать соответствующие функции библиотек баз данных — mysqli или PDO.
При работе с базой в Drupal обычно не приходится использовать функции подготовки аргументов, все необходимые операции уже заложены в соответствующие классы при выполнении запросов к базе.
Но если ваш запрос требует сложной подготовки, то вы наверняка конструируете его в чистом PHP. Тогда потребуется обращение к аналогам mysql_escape_string().
Решение
Drupal 7 расширяет класс PDO с помощью, по сути, интерфейса (абстрактного класса) DatabaseConnection (/includes/database/database.inc). Методы которого реализуются в соответствующих классах-драйверах подключения к базе данных.
Но в основе лежит PDO, так что необходимо лишь получить доступ к текущему подключению и вызвать метод PDO::quote(), как аналог mysql_escape_string().
Вот пример использования:
1 2 3 |
$db = Database::getConnection(); $s = 'какое то выражение'; $res = db_query("SELECT * FROM node WHERE title like " . $db->quote($s) ); |
PDO::qoute() добавляет одинарные кавычки и блокирует спец символы внутри строки.