我正在尝试编写一段代码,从QTableView中获取所选项目并将其从数据库中删除。
QModelIndex index = ui->tableView->selectionModel()->currentIndex();
QString value= ui->tableView->model()->data(index).toString();
qDebug() << "Value : " << value;
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("TestDatabase.db");
if(!db.open())
{
qDebug() << db.lastError();
qFatal("Failed to connect");
}
QSqlQuery qry;
qry.prepare("DELETE * FROM movies WHERE Title='"+value+"'");
if(!qry.exec())
{
QMessageBox::critical(this, tr("error::") , qry.lastError().text());
}
db.close();
但是,我收到'无查询无法获取行'错误。如果你能帮我解决这个问题,我将非常感激。
更新:问题是我在DELETE之后放了'*'。
答案 0 :(得分:1)
由于您未正确使用prepare()
,您的代码会遭受SQL注入。这也是您收到错误的原因。要以正确的方式使用prepare()
,必须至少有一个bindValue()
。在你的情况下像:
QSqlQuery qry;
qry.prepare("DELETE * FROM movies WHERE Title = :title");
qry.bindValue(":title", value);
if(!qry.exec()) //...
bindValue()
注意value
正确转义并且不会造成任何伤害。
...如果您认为SQL注入不是问题,请与Bobby Tables聊聊:)