在JS中构建一个SQLite语句,我没有得到我想要的完整命令

时间:2011-06-29 03:10:52

标签: javascript sqlite webos

所以,我正在JS中构建一个SQLite语句。问题是看起来%“正在转变为”未定义“+转义下一个字符。这是确切的代码:

正在弄乱的sql语句部分是:

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

之前还有更多,但它们都正确构建。因此,在程序中如果我输入以下内容作为searchText:

foo

然后当我将构建的sql语句输出到控制台时,我得到以下内容:

and s.plainText like 'undefinedoo%'

因此,它确认%“变为未定义并导致searchText的第一个字母被转义。

如何正确构建sql语句的这一部分?我必须使用“因为语句包含'。我必须使用%因为我需要通配符来搜索一串文本。

2 个答案:

答案 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语句不是一个好习惯,所以我不推荐它。容易做,但后来难以阅读和维护:)