我在插入值时遇到了一些麻烦 SQLite database
这就是我创建数据库的方式:
if(query.exec("CREATE TABLE IF NOT EXISTS visitorItemsV4 (channelID, itemId, itemName, itemPic, itemPrice, itemMeta);")) {
qDebug() << "Table `visitorItemsV4` created.";
}
Run Code Online (Sandbox Code Playgroud)
这就是我插入新项目的方式:
if (db.isOpen()) {
qDebug() << itemId;
qDebug() << itemName;
qDebug() << itemPic;
qDebug() << itemPrice;
QSqlQuery query(db);
ret = query.exec(QString("insert or replace into visitorItemsV4 values ('%1', '%2', '%3', '%4', '%5', '%6');")
.arg(channel).arg(itemId).arg(itemName).arg(itemPic).arg(itemPrice).arg(itemPrice));
qDebug() << query.lastError();
if (ret) {
qDebug() << "saved item";
}
}
Run Code Online (Sandbox Code Playgroud)
问题是itemPrice始终获取值%5并itemMeta获取值%6
itemPrice变量包含499所以我期望这是价值itemPrice和itemMeta.
我有什么想法我做错了吗?
永远不要尝试通过将值直接放入字符串来创建SQL命令; 这不仅会产生格式化问题,还会允许SQL注入.
使用参数代替:
query.prepare("insert or replace into visitorItemsV4 values (?,?,?,?,?,?)");
query.bindValue(0, channel);
query.bindValue(1, itemId);
query.bindValue(2, itemName);
query.bindValue(3, itemPic);
query.bindValue(4, itemPrice);
query.bindValue(5, itemPrice);
ret = query.exec();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |