Вы объявили определение для объекта Context
в других модулях? Поскольку ваш метод базы данных нуждается в этом, и вы вызываете get()
для его разрешения. Если нет, просто измените
single { UserDatabase.getInstance(get()) }
на
single { UserDatabase.getInstance(androidContext()) }
Последний вариант хорошо работает для меня, я не видел, чтобы он избегал «%». Поэтому $ db-> quote ('%'. $ _ GET ['query']. '%')
выводит % queryvalue%
Вы можете сделать конкатенацию $ input на уровне SQL:
$sql=$DB->quoteInto("SELECT * FROM t WHERE myname LIKE '%'|| ? ||'%'",$input);
К сожалению, это невозможно использовать, если вы хотите, чтобы $ input мог содержать буквенные символы «%» или «_». Чтобы обойти это, укажите явный символ LIKE-ESCAPE и экранируйте его самостоятельно:
$inputlike= '%'.preg_replace('[%_=]', '=$0', $input).'%';
$sql=$DB->quoteInto("SELECT * FROM t WHERE myname LIKE ? ESCAPE '='", $inputlike);
(Это может быть любой символ, необязательно '='. Это также работает вокруг ошибки, когда ESCAPE по умолчанию равен '\', если не указано в MySQL.)
К сожалению, SQL Server также использует специальный символ '[' для создания группы символов, подобных регулярному выражению. Поэтому, если ваша БД - SQL Server, вы должны включить '[' в группу в preg_replace. К сожалению, недопустимый ANSL SQL для экранирования '[' в других СУБД, где его не нужно экранировать.
вы можете просто использовать функцию, которую zf использует в строке addcslashes ($ value, "\ 000 \ n \ r \ '\ "\ 032"); это заменит строку так же, как использует zf, или вы можете (в случае mysql) использовать mysql_real_escape_string.
в любом случае вы не будете использовать один из БД функции кавычек
Мне интересно, есть ли в классе db метод для этого, но я не знаю, какой должен быть.
Очень просто:
$sql=$DB->quoteInto("SELECT *
FROM t
WHERE myname LIKE ?",'%' . $input . '%');
//Will output: SELECT FROM t WHERE myname LIKE '%inputtedvalue%'
$sql=$DB->quoteInto("SELECT *
FROM t
WHERE myname LIKE ?",'%' . $input);
//Will output: SELECT FROM t WHERE myname LIKE '%inputtedvalue'
$sql=$DB->quoteInto("SELECT *
FROM t
WHERE myname LIKE ?", $input . '%');
//Will output: SELECT FROM t WHERE myname LIKE 'inputtedvalue%'
$sql=$DB->quoteInto("SELECT *
FROM t
WHERE myname LIKE ?", $input);
//Will output: SELECT FROM t WHERE myname LIKE 'inputtedvalue'
В чем проблема?
:)
Проблема в том, что мы хотели бы избежать как специальные символы Вручную замена их было бы немного грязно, но если нет решения ...