所以,我正在JS中构建一个SQLite语句。问题是看起来%“正在转变为”未定义“+转义下一个字符。这是确切的代码:
正在弄乱的sql语句部分是:
"and s.plainText like '%"+searchText+"%'";
之前还有更多,但它们都正确构建。因此,在程序中如果我输入以下内容作为searchText:
foo
然后当我将构建的sql语句输出到控制台时,我得到以下内容:
and s.plainText like 'undefinedoo%'
因此,它确认%“变为未定义并导致searchText的第一个字母被转义。
如何正确构建sql语句的这一部分?我必须使用“因为语句包含'。我必须使用%因为我需要通配符来搜索一串文本。
答案 0 :(得分:2)
如果JS是指JavaScript,那么这不是正在发生的事情。这是jsfiddle:
尝试一下,你会发现它不是JS的问题。逃逸可能发生在此过程的后期,当它到达服务器或其他东西时。不知道确切的细节,以帮助那里。
作为猜测,如果您使用的是PHP和(s)printf,那么发送%f
(其中f
来自您使用的foo
示例)将意味着它预期浮动 - 它会显示错误。
作为旁注,似乎您正在从客户端向服务器发送SQL。如果是这样,那么这样做可能是一个非常糟糕的主意,特别是如果你没有进行任何SQL转义,就像你不在上面那样。看看这里:
了解基本信息。
我不熟悉webOS,但请检查此SOQ以寻找正确处理SQL参数的内容:
明确值得在webOS中进行更多关于如何正确执行此操作的调查 - Google是您的朋友。
答案 1 :(得分:0)
Mojo.Log命令处理您传递的字符串,就像C中的printf函数一样。也就是说,您可以指定一些占位符,这些占位符将填充传递的参数的值。一个例子是千言万语:
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。
所以很可能你的字符串是正确构建的,但是打印它会尝试用%foo%替换%f与参数。该参数永远不会传递,因此未定义。如果你使用其他东西而不是'foo'来测试(试试'bbb'),你应该看到正确的输出。
有关详情,请查看Mojo.Log的文档。
PS 这就是说构建这样的SQL语句不是一个好习惯,所以我不推荐它。容易做,但后来难以阅读和维护:)