同时包含单双引号的字符串怎样插入到SQlite?

ZeronoFreya 发布于 2016/12/02 22:21
阅读 2K+
收藏 0

【直播预告】SQL 审核真的能审出数据库的所有问题吗?”

比如:

var sql = "update xxx set xxx = '" + str + "' where id = 1;"
str为动态获取的字符串,可能包含 “” 或 ‘’ ,且不能替换。

比如str的值可能为:

这是双引号“
这是单引号‘



请问这种情况该怎么处理?





加载中
0
quanwei9958
quanwei9958

转义符

这是一个双引号\"
这是一个单引号\'



ZeronoFreya
ZeronoFreya
而且,sql语句不支持\吧,在SQlite studio中报错
ZeronoFreya
ZeronoFreya
文章内容不能改变...
0
hardisk0
hardisk0

把字符串转为bytes,比如下面这么用法:

sqlite> CREATE TABLE t1(name text);

sqlite> insert into t1 values(x'61626364');

sqlite> select * from t1;
abcd

0
watergood
watergood

存入之前 base64 加密一遍,取出之后 base64 解密一遍。加密过后的字符串中不会有双引号或者单引号。

0
watergood
watergood

base64 编码解码,虽然可以解决存入数据的问题,但是也带来了数据查询上的问题,所以不是理想的解决方案。
在PHP中,可以使用「内置的 PDO 扩展」解决这一问题。比如:

$dbFile = <<<BBB
path/to/database.db
BBB;

$db = new PDO("sqlite:$dbFile");

$sql = <<<BBB
insert into tablename (id, content)
            values (?, ?)
BBB;

$contentString = <<<BBB
Her name isn't "Maria".
BBB;

$sth = $db->prepare($sql);
$sth->execute([12, $contentString]);

 

0
学而不思则罔
学而不思则罔

不要用SQL拼接,用动态参数绑定呀。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部