Search code examples
iosswiftsqlite

Strange problem, equivalent substitution, different results


The Code A ,returns correct records

let query = """
SELECT id, a FROM ListenTable WHERE createTime BETWEEN '2025-02-12 00:00:00' AND 
'2025-02-12 23:59:59';
"""
...

if sqlite3_prepare_v2(db, query, -1, &queryStatement, nil) == SQLITE_OK {
    while sqlite3_step(queryStatement) == SQLITE_ROW {
        let record = ListenRecord(
            ...
        )
        newRecords.append(record)
    }
}

return newRecords

The Code B ,returns empty.

let query = """
SELECT id, a FROM ListenTable WHERE createTime BETWEEN ? AND ?;
"""
...

let startDate = "2025-02-12 00:00:00"
let endDate = "2025-02-12 23:59:59"

if sqlite3_prepare_v2(db, query, -1, &queryStatement, nil) == SQLITE_OK {
    sqlite3_bind_text(queryStatement, 1, startDate, -1, nil)
    sqlite3_bind_text(queryStatement, 2, endDate, -1, nil)

    while sqlite3_step(queryStatement) == SQLITE_ROW {
        let record = ListenRecord(
            ...
        )
        newRecords.append(record)
    }
}

return newRecords

Is the code A not as same as code B? why is the return not same? I can't find what's the problem, thanks


Solution

  • Thank everyone! I fixed it by using

    sqlite3_bind_text(queryStatement, 1, startDate.cString(using: .utf8), -1, nil) 
    

    replace

    sqlite3_bind_text(queryStatement, 1, startDate, -1, nil)