怎么逃避?正在插入sqlite数据库的数据。

时间:2011-09-30 09:23:37

标签: sqlite cordova

我正在使用手机间隙制作苹果应用程序(使用sqlite数据库)。

除了我尝试插入网络链接时,我的所有插件都能正常工作。这个错误是因为网络链接中有“字​​符。

使用以下内容:

var content = 'hello, this is my <a href="www.google.com">link</a>'
tx.executeSql('UPDATE PAGES SET content="'+content+'" WHERE id="1"');

带来以下错误

error code 1
error: "near "http": syntax error"

如果我删除网站地址,我不会收到错误。我试过了:     content = escape(content);

但这没效果。

4 个答案:

答案 0 :(得分:11)

使用参数绑定。这是你正在做的事情的正确和最安全的方式。

tx.executeSql('UPDATE PAGES SET content=? WHERE id=1', [content]);

答案 1 :(得分:4)

要在SQLite中转义引号,您必须重复引号。

因此要插入a 7" screen,您必须将a 7"" screen放在INSERT语句中。

答案 2 :(得分:1)

问题是引号。它们会更改SQL请求的含义并导致错误。

我找不到任何有关正确逃避它们的信息。我读过你可以在它们之前添加\然后将ESCAPE(“\”)添加到SQL语句中,但这似乎不适用于PhoneGap的实现。

最后,我做了一个简单的替换,其中单引号或双引号被替换为&quot;,如下所示:

var thisNotes = $('textarea#notes').val().replace(/(["'])/g,'&quot;');

我只需要在文本字段中显示引号 - 但我不需要它们作为HTML链接的一部分,所以我不确定该链接是否仍然有效。在显示链接之前,您可能需要撤消替换。

希望这有帮助。

答案 3 :(得分:0)

使用javascript替换可能会创建一个像这样的函数:

function CleanDbData( dirty ){
     var clean = dirty.replace( "/"","''").replace("<script>","[script]");
     return clean;
}

var mydata = CleanDbData( dirtydata );

这不是AS,你将不得不乱用正则表达式等,但你明白了[希望]