SQLite 本地日期(Shamsi)比较

问题描述 投票:0回答:1

我在我的 SQLite 数据库中存储了带有本地日期 (Shamsi) 的字段。我想获取日期介于 date_1 和 date_2 之间的数据库列表。它在使用 const 值时有效,如下所示: db!.rawQuery(("SELECT * FROM $tblVisit WHERE $colVisitDate BETWEEN '1401-10-01' AND '1401-12-29' ")

但我喜欢使用函数输入的变量而不是常量值。我怎样才能写出如下内容:

String? date_1, String? date_2

db!.rawQuery("SELECT * FROM $tblVisit WHERE $colVisitDate BETWEEN $date_1  AND $date_2 ")

现在,最后一条语句不返回任何列表,但第一个语句运行良好。 谢谢

flutter sqlite dart date comparison
1个回答
0
投票

文本/字符串值必须用单引号引起来

db!.rawQuery("SELECT * FROM $tblVisit WHERE $colVisitDate BETWEEN '$date_1'  AND '$date_2' ")

否则日期,因为它们只包含数字和运算符,被认为是一个表达式,所以 1401-10-01 变成 1390,因此结果不正常。

但是,这容易受到 SQL 注入的影响,因此 SQL 注入警察 认为使用参数绑定是更好的做法。也就是说,代码?占位符而不是值,例如BETWEEN ? AND ? 然后使用 selectionArgsrawQuery 参数作为 2 个日期值(注意不能绑定组件名称和关键字)。

原始查询

© www.soinside.com 2019 - 2024. All rights reserved.