【问题标题】:Sqlite Update query with SqliteModernCpp使用 SqliteModernCpp 的 Sqlite 更新查询
【发布时间】:2020-11-06 11:40:55
【问题描述】:

我正在使用 SqliteModernCpp 库。我有一个数据访问对象模式,包括以下功能:

void movie_data_access_object::update_movie(movie to_update)
{
    // connect to the database
    sqlite::database db(this->connection_string);

    // execute the query
    std::string query = "UPDATE movies SET title = " + to_update.get_title() + " WHERE rowid = " + std::to_string(to_update.get_id());
    db << query;
}

本质上,我想更新数据库中的记录,其rowid(PK)具有对象to_update在其参数中的值(由get_id()返回)。

此代码产生 SQL 逻辑错误。这是什么原因?

【问题讨论】:

  • 最有可能的是,to_update.get_title() 返回一个未作为字符串文字引用的字符串,因此查询变得无意义。另外,您正在邀请SQL injection。改用参数化查询;图书馆的README 显示了如何。

标签: sql database sqlite c++11


【解决方案1】:

原来正在创建的查询字符串中的单引号 (') 丢失了。该行应该是:

std::string query = "UPDATE movies SET title = '" + to_update.get_title() + "' WHERE rowid = " + std::to_string(to_update.get_id());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    相关资源
    最近更新 更多