QSqlQuery 不是绑定值

QSqlQuery is not binding values

我正在对 MySQL 数据库执行查询,并在我的整个应用程序中使用类似于下面的代码。但出于某种原因,下面的更新说 0 行受影响,而它应该是 1。在深入挖掘时,我发现我的 bindValue 命令似乎没有任何效果。

        QSqlQuery* query = new QSqlQuery(m_db)
        query->prepare(QString("UPDATE companies SET "
                               "NAME=:name, "
                               "ISUSER=:isuser, "
                               "ISVAR=:isvar, "
                               "ISOEM=:isoem, "
                               "CONTACT=:contact, "
                               "EMAIL=:email, "
                               "COMMENTS=:comments "
                               "WHERE ID=:id "
                               "LIMIT 1"));
        query->bindValue(":name",rowData.name);
        query->bindValue(":isuser",rowData.isEndUser);
        query->bindValue(":isvar",rowData.isVAR);
        query->bindValue(":isoem",rowData.isOEM);
        query->bindValue(":contact",rowData.contact);
        query->bindValue(":email",rowData.email);
        query->bindValue(":comments",rowData.comments);
        query->bindValue(":id",id);
        bool queryOk = query->exec();
        if (queryOk) {
            qDebug() << query->executedQuery();
            qDebug() << query->lastQuery();
            qDebug() << query->lastError().text();
            qDebug() << rowsAffected;

上面的代码中一定有某些东西 different/wrong 导致了下面的输出:

"UPDATE companies SET NAME=:name, ISUSER=:isuser, ISVAR=:isvar, ISOEM=:iSOEM, CONTACT=:contact, EMAIL=:email, COMMENTS=:comments WHERE ID=:id LIMIT 1"
"UPDATE companies SET NAME=:name, ISUSER=:isuser, ISVAR=:isvar, ISOEM=:iSOEM, CONTACT=:contact, EMAIL=:email, COMMENTS=:comments WHERE ID=:id LIMIT 1"
""
0

但是我看不出问题所在,查询returns也没有错误。然而查询字符串似乎包含未替换的变量名。

QSqlQuery::executedQuery() 不会向您显示绑定值,因为绑定值的思想是它们永远不会成为查询本身的一部分(这完全消除了转义它们的问题)。您看到的 提交给数据库的实际查询。绑定值 连同 查询字符串一起提交给数据库(与 QSqlQuery 非常相似)。

至于 rowsAffected 为零,我没有看到它被您的示例中的代码初始化或更新,这可能是它说 0 的原因。您可能想改用 query->numRowsAffected()

最后(与你的任何问题无关),你不需要在堆上分配 QSqlQuery(除非你真的需要查询比创建它的范围长)并且你可以简单地分配它在堆栈上。更少的动态分配 == 更少的内存泄漏机会:-)