0

FMDB ライブラリを使用する iOS アプリがあります。

7 フィールドの SQLite DB があります (1 つの自動インクリメント、6 つの通常のテキスト フィールド)。

実行しようとしています

 [db executeUpdate:@"INSERT INTO messages  VALUES (:field1,:field2,:field3,:field4,:field5,:field6)" withParameterDictionary:message];

ただし、フィールドが 6 つしかないため、エラーが発生します。自動インクリメント値が何であるかがわからないため、挿入できません(そのために別のクエリを配置できると思います...)。そして、インジェクションの影響を受けやすい構文を回避しようとしています

NSString* sql = [NSString stringWithFormat:@"insert into messages (%@) values (%@)", [newCols componentsJoinedByString:@", "], [newVals componentsJoinedByString:@", "]];

アドバイスありがとうございます!

4

3 に答える 3

1

FMDB も使用しているコードを確認しました。まず、insert ステートメントの列を指定する必要があります。これが私がすることです:

NSString *sqlSL = @"INSERT INTO SmartLibrary (TITEL, SUBTITEL, PICTURE, BLURB, MARK) VALUES (?, ? ,? ,? ,?)";
[db beginTransaction];
[db executeUpdate:sqlSL, book.title, book.subtitle, book.picture, book.summary, [NSNumber numberWithInteger:book.mark]];
[db commit];

この場合、構造 Book があります。したがって、この挿入の影響を受ける列を括弧内に指定する必要があります。また、準備されたステートメントを作成する方法と、トランザクションを使用する必要があることも確認できます。うまくいけば、これが役に立ちます!

于 2013-02-23T19:44:34.377 に答える