0

正如问题所说,我试图MySQL使用 where 子句的局部变量来查询数据库。我知道在 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;
}

但这也不起作用,任何帮助都会很棒,因为我似乎找不到答案

干杯

4

2 回答 2

10

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

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;
}
于 2013-04-22T09:20:20.873 回答
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 基本类型(字符串、基本容器等)混合使用。除了完全不可读的代码和转换问题外,从未见过这样做的任何优点。

于 2013-04-22T09:20:23.757 回答