SqlQuery一次多次命名占位符

Man*_*ood 6 c++ sql binding qt

我试过了

  QSqlQuery query;
  query.prepare("DELETE FROM names WHERE id_col = :ID OR id_parent = :ID");
  query.bindValue(":ID", idVal);
  query.exec();
Run Code Online (Sandbox Code Playgroud)

假设idVal将绑定两次,但执行此查询时,只删除id_parent = idVal的行,id_col = idVal保持未删除状态.所以只有第二次idVal绑定到查询.

当我重写它

  QSqlQuery query;
  query.prepare("DELETE FROM names WHERE id_col = ? OR id_parent = ?");
  query.bindValue(0, idVal);
  query.bindValue(1, idVal);
  query.exec();
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作.

它是在QSqlQuery中多次使用一个命名占位符的方法吗?

Tim*_*yer 3

来自QSqlQuery::bindValue() 文档

值不能绑定到查询中的多个位置,例如:

INSERT INTO testtable (id, name, samename) 值 (:id, :name, :name)

绑定到 name 将绑定到第一个 :name,但不会绑定到第二个。

最后一句似乎有点错误,因为它看起来像是绑定到第二个 :name ,但无论哪种方式,这都清楚地说明了 Qt 不支持您想要实现的目标。

您的选择是坚持使用已有的解决方法,或者使用 Mahmoud Gamal 在问题评论中提供的解决方案。

  • 在 Qt 5.9.1 的文档 (http://doc.qt.io/qt-5/qsqlquery.html#bindValue) 中,此文本已被删除,并且多重绑定确实有效。 (4认同)