Как я могу выйти из комплекса sql в Платформе Зенда?

Вы объявили определение для объекта Context в других модулях? Поскольку ваш метод базы данных нуждается в этом, и вы вызываете get() для его разрешения. Если нет, просто измените

single { UserDatabase.getInstance(get()) }

на

single { UserDatabase.getInstance(androidContext()) }

11
задан Itay Moav -Malimovka 12 April 2009 в 00:28
поделиться

5 ответов

Последний вариант хорошо работает для меня, я не видел, чтобы он избегал «%». Поэтому $ db-> quote ('%'. $ _ GET ['query']. '%') выводит % queryvalue%

16
ответ дан 3 December 2019 в 04:53
поделиться

Вы можете сделать конкатенацию $ 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 для экранирования '[' в других СУБД, где его не нужно экранировать.

2
ответ дан 3 December 2019 в 04:53
поделиться

вы можете просто использовать функцию, которую zf использует в строке addcslashes ($ value, "\ 000 \ n \ r \ '\ "\ 032"); это заменит строку так же, как использует zf, или вы можете (в случае mysql) использовать mysql_real_escape_string.

в любом случае вы не будете использовать один из БД функции кавычек

Мне интересно, есть ли в классе db метод для этого, но я не знаю, какой должен быть.

-1
ответ дан 3 December 2019 в 04:53
поделиться

Очень просто:

$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'

В чем проблема?

:)

1
ответ дан 3 December 2019 в 04:53
поделиться

Проблема в том, что мы хотели бы избежать как специальные символы Вручную замена их было бы немного грязно, но если нет решения ...

1
ответ дан 3 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: