2017-10-14 5 views
0

나는처럼 으로 쿼리를 얻을이 같은 시도 싶어 :FMDB 쿼리에서 텍스트와 비슷하게 사용하는 방법 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) 
} 

을했지만 작동하지 않습니다.

답변

0

그냥 SQL 문에서 매개 변수를? 이 같은 SQL 와일드 카드 문자로 전달 된 값을 포장 :

let name = "%pp%" 
... 
var queryString = "select * from products where name like ? and deleted = 0 order by id desc" 

이유는 SQLite는에 그리고 아마도 다른 모든 SQL 엔진의 매개 변수 값과 정보를 입력 구성된 완전한 실체이다. 따라서 '%?%'과 같이 인용 부호 (')로 매개 변수를 묶는 것은 결코 필요하지 않으며 실제로는 잘못된 습관입니다. like 연산자는 필요한 경우 SQL 와일드 카드 문자를 포함 할 수있는 피연산자로 문자열 식만을 기대합니다. 따라서 와일드 카드 문자 (%, _ 등)가 포함 된 문자열 식을 만들어 필요할 때 명령문에 전달하면됩니다.

희망이 있습니다.

+0

은 정말 당신을 위해 일을 했습니까? 나는 또한 같은 문제에 직면했다. –

+0

@JitendraModi 나를 위해 일하지 않았다. –

+0

나는 그것이 작동하지 않는다는 것을 안다.하지만이 솔루션이 내 이슈를 해결할 수 있다면 도움이 될 것이다. 나는 또한/% pp/%와 같이 시도했지만 원하는 출력을 얻지 못했습니다. 답변이나 해결책을 찾으면 나 같은 사람을 위해 여기에 게시하십시오. @reza_khalafi –

0

그냥이 시도 :

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

코드가 작동하더라도 항상 코드에서 사용한 것처럼 매개 변수를 사용해보십시오. 따라서 코드가 잠재적 인 스크립트 삽입에 덜 취약 해지고 데이터베이스에서 더 빠르게 실행되는 준비된 쿼리 문을 작성할 수 있습니다. –

관련 문제