当前位置:  开发笔记 > 数据库 > 正文

转义单引号字符以在SQLite查询中使用

如何解决《转义单引号字符以在SQLite查询中使用》经验,为你挑选了3个好方法。

我编写了数据库模式(到目前为止只有一个表),并在一个文件中编写了该表的INSERT语句.然后我创建了数据库,如下所示:

$ sqlite3 newdatabase.db
SQLite version 3.4.0
Enter ".help" for instructions
sqlite> .read ./schema.sql
SQL error near line 16: near "s": syntax error

我的文件的第16行看起来像这样:

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there\'s');

问题是单引号的转义字符.我也试过双重转义单引号(使用\\\'而不是\'),但这也不起作用.我究竟做错了什么?



1> Ryan Guill..:

尝试将单引号加倍(许多数据库都希望这样),所以它会是:

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');

文件中的相关引用:

通过将字符串括在单引号(')中形成字符串常量.字符串中的单引号可以通过在行中放入两个单引号来编码 - 如Pascal中所示.不支持使用反斜杠字符的C样式转义,因为它们不是标准SQL.BLOB文字是包含十六进制数据的字符串文字,前面是单个"x"或"X"字符....文字值也可以是令牌"NULL".


另外,如果宿主语言支持它们,请考虑使用绑定参数(大多数都支持,但SQLite shell不支持).那么SQL将是`INSERT INTO table_name(field1,field2)VALUES(?,?)`并且值将直接提供(并且没有替换).

2> overslacked..:

我相信你想通过加倍单引号来逃避:

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');



3> 小智..:

要替换字符串中的所有('),请使用

.replace(/\'/g,"''")

例:

sample = "St. Mary's and St. John's";
escapedSample = sample.replace(/\'/g,"''")

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有