FMDB更新语句不使用我的值

时间:2018-02-08 20:34:46

标签: ios sql swift fmdb

您好我正在尝试对数据库中的现有行执行更新。我一直在我的sql语句中使用问号?,并给FMDB一个值数组来替换?&。以下是使用此逻辑的示例INSERT语句:

let sqlStatement = "INSERT INTO Cards (Column1, Column2, Column3) VALUES (?, ?, ?)"

try! db.executeUpdate(sqlStatement, values: Data)

现在我想为更新语句执行此操作,我已经在SQLPro中使用了该语句,但我似乎无法让它在1行上运行。这是我在swift / fmdb之外使用的SQL查询:

UPDATE MyTable 
SET ColumnId='5', Column2='Helloworld', Column3='data' 
WHERE ColumnId='5'

现在这是我在swift中的陈述:

let sqlStatement = "UPDATE Cards SET ColumnId='?', Column2='?', Column3='?'"

try! db.executeUpdate(sqlStatement, values: Data)

当我运行此语句时,更新将完成,但数据库中的所有数据都将设置为?。我不想直接将我的数据放入sql语句字符串中(因为文档告诉你不要这样做,避免使用sql注入)。

如何修复此语句以便我可以在我的应用程序上更新sql数据库?

1 个答案:

答案 0 :(得分:1)

更新声明将如下:

-(void)updateValue:(Model *)data
    {
        [instance.database open];
        BOOL isUpdated=[instance.database executeUpdate:@"UPDATE Cards SET ColumnId =? , Column2 =? , Column3 =? WHERE ColumnId =?",data.ColumnId,data.Column2,data.Column3,data.ColumnId];
        [instance.database close];
    }

Swift版本:

func updateValue(_ data: Model) {
    instance.database.open()
    let isUpdated: Bool = instance.database.executeUpdate("UPDATE Cards SET ColumnId =? , Column2 =? , Column3 =? WHERE ColumnId =?", data.columnId, data.column2, data.column3, data.columnId)
    instance.database.close()
}