Sqlite заявления для iOS - PullRequest
       1

Sqlite заявления для iOS

1 голос
/ 25 апреля 2011

Я пытаюсь создать таблицу с несколькими столбцами. Я пытаюсь связать значение (которое является переменной), чтобы создать имя таблицы. Я продолжаю получать сообщение об ошибке: («Ошибка при создании оператора обновления.» Рядом с «?»: Синтаксическая ошибка »). Поэтому, очевидно, я делаю что-то не так, пытаясь связать его. Кто-нибудь может пролить свет на это для меня?

- (void)addTable{

     NSString *cat = sourceName;

     if(addtablestmt == nil) {

    const char *sqlStr = "CREATE Table ? ('itemID' 'integer','itemName' 'char(50)','itemCategory' 'char(50)','itemCount' 'integer','itemDone' 'char(50)','itemNote' 'char(50)','itemOrder' 'char(50)',PRIMARY KEY (itemID))";


    if(sqlite3_prepare_v2(database, sqlStr, -1, &addtablestmt, NULL) != SQLITE_OK)
        NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database));

    sqlite3_bind_text(addtablestmt, 1, [cat UTF8String], -1, SQLITE_TRANSIENT);

    }

    if(SQLITE_DONE != sqlite3_step(addtablestmt)){
        NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database));

    }

    sqlite3_reset(addtablestmt);

}

Ответы [ 2 ]

0 голосов
/ 12 января 2013

Вы не можете связать имя таблицы в качестве параметра. Если вы планируете это сделать, то вам нужно динамически создать строку, как это было предложено Джо. Однако будьте осторожны, так как такой подход может привести к атакам SQL инъекций. Например, пользователь мог ввести имя "; Удалить из sqlite_master".

0 голосов
/ 26 апреля 2011

Вы можете попробовать что-то более похожее на:

NSString *sqlStr = [NSString stringWithFormat:@"CREATE Table %@ ('itemID' 'integer','itemName' 'char(50)','itemCategory' 'char(50)','itemCount' 'integer','itemDone' 'char(50)','itemNote' 'char(50)','itemOrder' 'char(50)',PRIMARY KEY (itemID))", sourceName];

if(sqlite3_prepare_v2(database, [sqlStr UTF8String], -1, &addtablestmt, NULL) != SQLITE_OK)
        NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...