2

我正在尝试使用字符串转义功能,而无需访问打开的 pqxx::connection。

考虑以下代码:

#include <pqxx/pqxx>
#include <iostream>

int main() {
    pqxx::connection c;
    std::cout << c.quote("this is a test") << std::endl;
}

它抛出我的连接被打破了。如果有另一种方法可以实现这一点(希望没有数据库连接),有人可以给我一个标志吗?我忽略了什么吗?

更新:

我在libpq的文档中找到了为什么此功能可能需要活动连接的可能原因:

与 PQescapeStringConn 的唯一区别是 PQescapeString 不采用 PGconn 或错误参数。因此,它无法根据连接属性(例如字符编码)调整其行为,因此可能会给出错误的结果。此外,它无法报告错误情况。

4

2 回答 2

1

我遇到过同样的问题。我解决问题的方法如下所示。这是一个不能完全解决问题的技巧,但是,惰性部分它只在整个运行时执行中执行一次,并且最大限度地减少了它。真正的问题是 libpqxx 的编写方式。

std::string
quote(const std::string& str, const std::string& database_connection)
{
    try {
        static pqxx::lazyconnection C {database_connection};
        static bool disconnect = true;
        if(disconnect) {
            C.disconnect();
            disconnect = false;
        }
        return C.quote(str);
    } catch (const std::exception &e) { throw e.what(); }
}
于 2021-04-25T07:53:41.410 回答
0

无需使用 pqxx 即可轻松使用字符转义序列。

std::cout << "\"This is a qoute\"" << std::endl;

'\' 字符开始一个转义序列。对于 qoutes,您只需说 \"

其他序列: http ://en.cppreference.com/w/cpp/language/escape

于 2012-09-28T17:07:41.503 回答