FMDB 更新语句不使用我的值
Posted
技术标签:
【中文标题】FMDB 更新语句不使用我的值【英文标题】:FMDB update statement doesnt use my values 【发布时间】:2018-02-08 20:34:45 【问题描述】:您好,我正在尝试对数据库中的现有行执行更新。我一直在我的 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 injection 之类的)。
如何修复此语句,以便更新我的应用程序上的 sql 数据库?
【问题讨论】:
【参考方案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];
斯威夫特版本:
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()
【讨论】:
我同意这一点,我之前在目标 c 中使用过这个确切的更新声明。我怎样才能用swift写同样的东西?如果我没有深入到应用程序中,我实际上会在 objc 中重写我的数据库类。 查看编辑后的答案@Bodungus以上是关于FMDB 更新语句不使用我的值的主要内容,如果未能解决你的问题,请参考以下文章