无查询无法获取行

时间:2017-05-27 20:50:17

标签: qt sqlite

我正在尝试编写一段代码,从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之后放了'*'。

1 个答案:

答案 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聊聊:)