如何在FMDB查询中使用Like与文本iOS Swift 4?
问题描述:
我想和得到查询像,并尝试这样的:如何在FMDB查询中使用Like与文本iOS Swift 4?
let name = "pp" //apple
let db = openDB()
do {
var queryString = "select * from products where name like '%?%' and deleted = 0 order by id desc"
let rs = try db.executeQuery(queryString, values:[name])
var arr:Array<Product> = []
while rs.next() {
arr.append(parseProductDB(rs))
}
closeDB(db)
} catch {
print("failed: \(error.localizedDescription)")
closeDB(db)
}
,但它不工作。
答
只需在你的sql语句中传递参数?与SQL通配符换你传递的值,就像这样:
let name = "%pp%"
...
var queryString = "select * from products where name like ? and deleted = 0 order by id desc"
的原因是在SQLite和可能在所有其他SQL引擎的参数是由它的价值和类型信息的一个完整的实体。因此,将参数封装在引号(')(如'%?%'
)中是不需要的,实际上是一种错误的做法。 另外like
运算符只需要一个字符串表达式作为操作数,如果需要可能包含SQL通配符。所以你只需要创建一个带有嵌入通配符(%,_等)的字符串表达式,并在需要时将它传递给你的语句。
希望它有帮助。
答
就试试这个:
let db = openDB()
do {
var queryString =
queryString = String(format:"select * from products where name like '%%%@%%' and deleted = 0 order by id desc",name)
let rs = try db.executeQuery(queryString, values:nil)
var arr:Array<Product> = []
while rs.next() {
arr.append(parseProductDB(rs))
}
closeDB(db)
} catch {
print("failed: \(error.localizedDescription)")
closeDB(db)
}
+0
@JitendraModi试试这个。其作品。 –
+0
即使它工作,你应该总是尝试使用像你在代码中使用的参数。这使得您的代码不易受潜在脚本注入的影响,并让您有机会创建在数据库中运行更快的准备好的查询语句。 –
没有真的为你工作?我也遇到过相同的问题 –
@JitendraModi不适合我。 –
我知道这是行不通的,但如果这个解决方案可能会解决我的问题。我也试过/%pp /%,但没有得到想要的结果。如果您找到任何答案或解决方案,请将其发布给像我这样的人。 @reza_khalafi –