这是我在 stack-overflow 的第一篇文章,所以提前抱歉可能出现“不良做法”。

上下文:目标是通过 http-requests 将 SPARQL 查询发送到 GraphDB 数据库.问题:以安全的方式构建对代码的查询。目前通过std::string dummyStr = "Hello"+" World"dummyStr.append("bla")完成(我被告知由于 XSS 这不安全,但这不是问题)

**问题:**您是否知道用于执行此字符串连接的任何查询构建器库?在 Web 上搜索 C 查询构建器返回这个 answer。在使用建议的 Qt QSqlQuery 类实现该方法之后,我能够“.prepare”查询,但不能“.bindValue”。

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.open();
QSqlQuery startQuery;
/*Prepare query*/
startQuery.prepare("INSERT INTO person (id, forename, surname) "
          "VALUES (:id, :forename, :surname)");
startQuery.bindValue(":id", 1001);
startQuery.bindValue(":forename", "Bart");
startQuery.bindValue(":surname", "Simpson");
/*convert query to std::string*/
QString startQueryString = startQuery.lastQuery();
std::string dummyQuery = startQueryString.toUtf8().constData();

为什么我不能将值绑定到占位符?是因为我没有“实际”数据库,而只是 dummy-database 只是构建查询?

我的实际查询看起来像这样:SELECT ?s WHERE { FILTER(STRSTARTS(STR(?s),":referenceIRI")). ?s rdf:type rdfs:Class.}我想将:referenceIRI视为占位符。

我一直在搜索,试图克服这个问题,因为我只需要 query-builder 功能。

另外:在我的实际 SPARQL 查询中,我有?:myVal元素,这是 QSqlQuery 中绑定值的两种占位符类型。关于如何 by-pass ?占位符的任何想法,只考虑:myVal -type?