gpt4 book ai didi

c++ - SQL错误: near ":02": syntax error

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:39 24 4
gpt4 key购买 nike

此错误发生在行

    sprintf(sql, "INSERT INTO Device_Details (imei, mobile_num, passwd, Dev_addr, id) "  \
"VALUES (%s, %d, %s, %s, %d ); ", imei, id, passwd, dev_addr, id);
rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);

哪里

char*  passwd, *imei, *mobile_num, *strtok_var ;
cout<<idIndex << "+" << passwd<<"+"<<imei << "+" << mobile_num << endl;

打印1+abc+abc+abc

创建的表

sql = "CREATE TABLE Device_Details("  \
"imei CHAR(32) PRIMARY KEY NOT NULL," \
"mobile_num INT NOT NULL," \
"passwd CHAR(50) ," \
"Dev_addr CHAR(50) ," \
"id INT);";

/* Execute SQL statement */
rc = sqlite3_exec(db, sql, 0/*callback*/, 0, &zErrMsg);

最佳答案

解决您眼前的问题,您的字符串没有被引用:

sprintf(sql, "INSERT INTO Device_Details (imei, mobile_num, passwd, Dev_addr, id) "  \
"VALUES ('%s', %d, '%s', '%s', %d ); ", imei, id, passwd, dev_addr, id);

但是,我强烈建议不要手动创建这样的 SQL 语句。这样做会暴露SQL injection攻击。

例如,假设有人使用以下字符串作为 passwd:

', '', 1);  drop table Device_Details; --

生成的 SQL 看起来像这样:

INSERT INTO Device_Details (imei, mobile_num, passwd, Dev_addr, id)
VALUES ('+', 1, '', '', 1); drop table Device_Details; --', 'dev_addr', 1 );

这将关闭原始 INSERT 语句,添加 DELETE TABLE 语句,并注释掉原始 INSERT 的其余部分。现在你的表和其中的所有数据都消失了。一定要注意little Bobby tables ...

enter image description here

处理此问题的正确方法是使用带有参数绑定(bind)的准备好的语句。这可以防止此类攻击,并且比尝试手动清理输入更可靠。

请参阅SQLite page for prepared statements有关如何执行此操作的详细信息。

关于c++ - SQL错误: near ":02": syntax error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45357966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com