我们正在与同事讨论 BindValue
和 QString.arg()
数据库方面是否存在差异,但我们自己无法回答。
QString().arg()
QSqlQuery qry;
qry.prepare(QString("INSERT INTO employee (id, name, salary) VALUES (%1, 'Thad Beaumont', %2)").arg(1001).arg(65000));
qry.exec();
QSqlQuery::bindValue
QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) VALUES (:id, :name,:salary)");
query.bindValue(":id", 1001);
query.bindValue(":name", "Thad Beaumont");
query.bindValue(":salary", 65000);
query.exec();
它们之间有什么性能差异吗? BindValues
是否优于其他方法?
最佳答案
我认为您和您的同事将准备好的陈述弄错了。例如,使用它们的最著名目标之一是(尝试)避免 SQL 注入(inject),这就是为什么无论性能问题如何,您都应该始终使用参数并绑定(bind)它们。在这种情况下,使用 arg
没有意义:它不是参数绑定(bind)的替代品,您只是在构建 SQL 字符串。如果你 100% 确定参数被很好地过滤/转义/检查,你可以使用它,并用 exec 执行它, 没有理由使用准备好的语句。
关于c++ - QSqlQuery 绑定(bind)值与 BindValues vs QString.arg() 是否存在性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48499674/