【问题标题】:How to make sql query case insensitive in sqlite for my iOS app如何在我的 iOS 应用程序的 sqlite 中使 sql 查询不区分大小写
【发布时间】:2013-04-17 03:26:02
【问题描述】:

我在我的 sqlite 数据库中执行 sql 查询,如下所示:

NSString *queryString = [NSString stringWithFormat:@"SELECT * FROM PROFILE WHERE no = '%@'", txtNo.text];

但我需要查询不区分大小写。我该怎么做?

需要一些指导。

【问题讨论】:

  • 就像 rmaddy 说的那样,在输入和列上都使用upper 函数,或者使用LIKE 运算符而不是=(不过,如果使用LIKE,你必须小心关于通配符,输入字符串中的%)。
  • 除了 rmaddy 对 SQL 注入攻击的观察之外,一个更实际的问题是,如果 txtNo 具有类似 "Joe's Bar & Grill" 的值,其中撇号将被解释为结束引号WHERE 子句。 sqlite3_bind_text 绝对是要走的路。或者像FMDB 这样的库给你像executeQuery 这样的方法,它们接受像stringWithFormat 这样的参数,并在幕后为你处理sqlite3_bind_text 的血腥细节(但你仍然使用? 占位符)。

标签: ios sql sqlite


【解决方案1】:

使用upper()函数:

SELECT * FROM PROFILE WHERE upper(no) = upper(?);

您永远不应该使用stringWithFormat 来创建您的查询。正确使用sqlite3_bind_xxx 将值绑定到查询。这样做的原因是正确使用sqlite3_bind_xxx 将确保正确引用该值并且正确转义任何特殊字符。阅读 SQL 注入黑客,了解正确转义的重要性。

【讨论】:

  • +1 用于upper 以及不使用stringWithFormat 的建议!
猜你喜欢
  • 1970-01-01
  • 2017-03-17
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 2019-12-25
  • 1970-01-01
  • 2013-03-06
相关资源
最近更新 更多