C 语言 - 将字符串参数插入 sqlite 数据库 %s 不起作用

Ama*_*yer -1 c database sqlite

所以我正在使用 sqlite 并创建了这个数据库:

sql = "CREATE TABLE COMPANY("  \
     "NAME TEXT PRIMARY KEY    NOT NULL," \
     "LAST              TEXT," \
     "PIN               INT," \
     "DL                INT,"\
     "SSN               INT,"\
     "EMAIL             TEXT,"\
     "BALANCE           REAL );";
Run Code Online (Sandbox Code Playgroud)

我正在尝试在 NAME 中插入一个值,但它不断给出错误“没有这样的列:John

这就是我尝试插入它的方式:(假设一切都已声明)

strcpy(text, "John");
sprintf (sql,"INSERT INTO ATM (NAME,PIN) VALUES (%s',%d);",text,number);
Run Code Online (Sandbox Code Playgroud)

当我改用这行代码时:

sprintf (sql,"INSERT INTO ATM (NAME,PIN) VALUES ('john',%d);",number);
Run Code Online (Sandbox Code Playgroud)

它起作用了,我能够插入这两个值。

为什么第一个不工作?请有人帮忙

谢谢

dvh*_*vhh 6

由于我希望您使用预准备语句,因此我将使用预准备语句复制您的代码。

sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, "INSERT INTO ATM (NAME,PIN) VALUES (?,?);", 41, &stmt, NULL);
if(stmt != NULL) {
    sqlite3_bind_text(stmt, 1, "John", SQLITE_TRANSIENT);
    sqlite3_bind_int(stmt, 2, number);
    sqlite3_step(stmt);
    sqlite3_finalize(stmt);
}
Run Code Online (Sandbox Code Playgroud)

使用sprintf创建你的发言是不安全的容易出错的,你应该了解SQL注入