Javascript 在JS和I'中构建SQLite语句;我没有得到我想要的全部命令

Javascript 在JS和I'中构建SQLite语句;我没有得到我想要的全部命令,javascript,sqlite,webos,Javascript,Sqlite,Webos,所以,我正在用JS构建一个SQLite语句。问题是“%”似乎正在变成“未定义”+转义下一个字符。下面是确切的代码: sql语句中混乱的部分如下所示: "and s.plainText like '%"+searchText+"%'"; 之前还有很多,但都是正确构建的。因此,如果我在程序中输入以下内容作为搜索文本: foo 然后,当我将构建的sql语句输出到控制台时,我得到以下结果: and s.plainText like 'undefinedoo%' 因此,很明显,“%”变为未定义,导致

所以,我正在用JS构建一个SQLite语句。问题是“%”似乎正在变成“未定义”+转义下一个字符。下面是确切的代码:

sql语句中混乱的部分如下所示:

"and s.plainText like '%"+searchText+"%'";
之前还有很多,但都是正确构建的。因此,如果我在程序中输入以下内容作为搜索文本:

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

and s.plainText like 'undefinedoo%'
因此,很明显,“%”变为未定义,导致searchText的第一个字母被转义


如何正确构建sql语句的这一部分?我必须使用“cause the statement contains”。我必须使用%cause,因为我需要通配符来搜索文本字符串。

如果JS是指JavaScript,那么这不是实际情况。以下是JSFIDLE:

尝试一下,你会发现这不是一个JS问题。转义可能会在过程的后期发生,当它到达服务器或其他地方时。不知道确切的细节来帮助

作为猜测,如果您使用的是PHP和(s)printf,那么发送
%f
(其中
f
来自您使用的
foo
示例)将意味着它需要一个浮点数-但它将显示一个错误

作为旁注,您似乎正在将SQL从客户端发送到服务器。如果是这样,那么这样做可能是一个非常糟糕的主意,尤其是如果您没有执行任何SQL转义,因为您没有执行上述操作。请看这里:

基本细节

我不熟悉webOS,但请检查此SOq,以了解是否正确处理SQL参数:


确实值得做一些关于如何在webOS中正确执行此操作的调查-是您的朋友。

Mojo.Log命令处理您传递的字符串,有点像C中的printf函数。也就是说,您可以指定一些占位符,这些占位符将用传递的参数值填充。例如,1000字左右:

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”)

有关更多信息,请参阅的文档


PS尽管如此,这样构造SQL语句并不是一个好的做法,所以我不推荐这样做。操作简单,但以后很难阅读和维护:)

你永远不应该这样构造查询。首先,JS Fiddle很酷。我会将它添加到书签中。也就是说,这都是在webOS(手机操作系统)上实现的就我所知,客户端和服务器是一体的。无论如何,我不知道其他方法来处理这个问题。最后,我有日志记录命令来输出构建的SQL语句,作为代码中的下一条语句,因此在此期间不会发生任何其他事情。也许这个问题更具体到webOS?JSFIDLE真的很好。对于webOS,我不熟悉它来帮助您。一般来说,发送SQL(或SQL的一部分)从客户端到服务器而不进行转义/验证是非常危险的-请查看Wikipedia链接。因此不要这样做。为了进行测试,请尝试将
%%
\%%
替换为
%
,这可能会有所帮助。再说一次-不要允许SQL注入,它会让您一蹶不振。