sqlite 如何安全地向查询添加原始字符串?

7uzetpgm  于 2023-01-05  发布在  SQLite
关注(0)|答案(1)|浏览(158)

我的SQLite查询:

let data = db.getAllRows(sql"""
SELECT name, source, uploaded_at, canonical_url, size
FROM table
WHERE name like ?
ORDER BY ? DESC
LIMIT ?
OFFSET ?
""", &"%{query}%", order, limit, offset)

Nim会在任何替换?的字符串中添加单引号。我可以手动构建SQL字符串,然后使用sql(string),但输入不会转义。除了?之外,是否还有其他标记不添加'

zy1mlcev

zy1mlcev1#

要回答标题问题:* “如何安全地将原始字符串添加到查询中”*,您可以使用dbQuote:

import db_sqlite

let
  a = "unes'caped %' string"
  b = "my prefix ->"
  c = "<- my suffix"
  d = b & dbQuote(a) & c

echo d

这将打印my prefix ->'unes''caped %'' string'<- my suffix,在前面/后面加上引号并转义其中的任何一个。这个字符串作为sql语句传递可能是安全的。你应该会得到与使用?和额外参数相同的结果。

相关问题