如何使用局部变量作为MySQL查询的一部分(Qt C ++)

时间:2013-04-22 09:13:30

标签: c++ mysql qt

正如问题所说,我试图使用where子句的局部变量来查询MySQL数据库。我知道在java中你可以使用+运算符在查询字符串中插入局部变量,这在C++中显然是不一样的。所以我想也许id使用字符串流:

void test::something(double car_id)
{
 std::stringstream ss;
    ss << "SELECT * FROM cars WHERE carID = '";
    ss << car_id << "'";
    QString query_string = QString::fromStdString(ss.str());
    QSqlQuery query(query_string);
    // execute the query
    query.exec();
    std::cout << query.value("carID").toString().toStdString() << std::endl;
}

但这也行不通,任何帮助都会很棒,因为我似乎无法找到答案

欢呼

2 个答案:

答案 0 :(得分:9)

您应该参数化查询,而不是将变量附加到查询字符串。所以,像这样:

void test::something(double car_id){
    QSqlQuery query;
    query.prepare("SELECT * FROM cars WHERE carID = ?");
    query.addBindValue(car_id);
    query.exec();
    std::cout << query.value("carID").toString().toStdString() << std::endl;
}

或者使用命名绑定:

void test::something(double car_id){
    QSqlQuery query;
    query.prepare("SELECT * FROM cars WHERE carID = :car_id");
    query.bindValue(":car_id", car_id);
    query.exec();
    std::cout << query.value("carID").toString().toStdString() << std::endl;
}

答案 1 :(得分:0)

如果carID是DB中的数字列,则不需要引号

QString query_string = "SELECT * FROM cars WHERE carID = " 
+ QString::number(car_id);

,否则

QString query_string = "SELECT * FROM cars WHERE carID = '" 
+ QString::number(car_id) + "'";

注1:您根本不应该使用此方法,但请查看绑定查询参数。出于很多不同的原因(注射,转义,类型格式化/转换等)

注2:为什么人们喜欢将STL基本类型与QT基本类型(字符串,基本容器等)混合使用。除了完全不可读的代码和转换问题之外,从未看到过这方面的任何优点。