Создание оператора SQLite в JS, и я не получаю полную команду, которую я хочу - PullRequest
1 голос
/ 29 июня 2011

Итак, я строю оператор SQLite в JS. Проблема в том, что кажется, что% "превращается в" неопределенное "+ экранирование следующего символа. Вот точный код:

Часть оператора sql, которая мешает, это:

"and s.plainText like '%"+searchText+"%'";

Есть еще кое-что, но все строится правильно. Итак, в программе, если я введу следующее как searchText:

foo

Затем, когда я вывожу встроенный SQL-оператор на консоль, я получаю следующее:

and s.plainText like 'undefinedoo%'

Таким образом, оказывается, что% "превращается в неопределенное и приводит к экранированию первой буквы searchText.

Как правильно построить эту часть оператора sql? Я должен использовать «причина, по которой оператор содержит». Мне нужно использовать%, потому что мне нужен шаблон для поиска строки текста.

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Если под JS вы подразумеваете JavaScript, то это не то, что происходит.Вот jsfiddle:

Попробуйте, и вы увидите, что это не проблема JS.Экранирование, вероятно, происходит позже в процессе, когда он попадает на сервер или что-то еще.Не знаю точных деталей, чтобы помочь там.

Как вы думаете, если вы используете PHP и (s) printf, то отправка %f (где f исходит из примера foo, который вы использовали) будет означать, что она ожидает float -однако будет отображаться сообщение об ошибке.

Как примечание, кажется, что вы отправляете SQL с клиента на сервер.Если это так, то, вероятно, это очень плохая идея, особенно если вы не выполняете экранирование SQL, как указано выше.Посмотрите здесь:

для получения базовых деталей.

Я не знаком с webOS, но для чего-нибудь проверьте этот SOqкоторая обрабатывает параметры SQL правильно:

Определенно стоит провести еще несколько исследований о том, как сделать это правильно в webOS - Google - ваш друг.

0 голосов
/ 28 июля 2011

Команды Mojo.Log обрабатывают строку, которую вы немного передаете, как функцию printf в C. То есть вы можете указать некоторые заполнители, которые будут заполнены значением переданных параметров. Пример тысячи слов так:

Mojo.Log.info("My string is '%s' and my number is '%f'", strData, numData);

напечатает

My string is 'aaa' and my number is '1'

если strData равен 'aaa', а numData равен 1.

Так что, скорее всего, ваша строка построена правильно, но при печати она попытается заменить% f из% foo% параметром. Параметр никогда не передается, поэтому он не определен. Вы должны увидеть правильный вывод, если вы используете для тестирования что-то другое, а не 'foo' (попробуйте 'bbb').

Для получения дополнительной информации ознакомьтесь с документацией для Mojo.Log .

PS При этом не рекомендуется создавать такие выражения SQL, поэтому я не рекомендую это делать. Легко сделать, но потом трудно читать и поддерживать :)

...