2

我正在尝试将 html 字符串插入到数据库列中,但我遇到了 html 内的引号等字符的问题。我使用 libpqxx 作为我的 C++ 库在数据库中执行查询,我使用函数 pqxx::quote() 在我的字符串之间添加引号,这样我在执行插入查询时就不会遇到语法问题,但问题是当我列出数据库中的行时,html 列仅显示二进制数据。我不知道这是为什么?这是创建表的sql:

  CREATE TABLE html_table(ID SERIAL PRIMARY KEY NOT NULL,URL TEXT NOT NULL,PARSERS TEXT NOT NULL,HTML TEXT);

这是 C++ 代码:

void PostgreDb::insertRow(const std::string url,
                          const std::string parsers,
                          const std::string html)
{
    work W(*c);
    std::string sql = "INSERT INTO "+ table +"(URL,PARSERS,HTML)" \
            "VALUES (\'"+ url.c_str() +"\',\'"+ parsers.c_str() +"\',"+ W.quote(html) +");";

    W.exec(sql);
    W.commit();
}

执行这段代码后在数据库中的结果:

mydb=# select url,parsers,html from html_table;
              url               |     parsers      |      html       
--------------------------------+------------------+-----------------
 http://www.lupiga.com/         | name description | \x1F\u008B\x08
 http://www.huffingtonpost.com/ | name keywords    | \x1F\u008B\x08
(2 rows)

注意:我会说 quote() 在这里不可靠,有人知道解决这个问题的更好方法吗?

编辑:尝试使用原始文字后。

void PostgreDb::insertRow(const std::string url,
                          const std::string parsers,
                          const std::string html)
{
    work W(*c);
    std::string raw = "\n"+ html +"\n";
    std::string sql = "INSERT INTO "+ table +"(URL,PARSERS,HTML)" \
            "VALUES (\'"+ url.c_str() +"\',\'"+ parsers.c_str() +"\',"+ W.quote(raw) +");";

    W.exec(sql);
    W.commit();
}

仍然不起作用:

mydb=# select url,parsers,html from html_table;
              url               |     parsers      |      html      
--------------------------------+------------------+----------------
                                |                  |
 http://www.lupiga.com/         | name description |               +
                                |                  | \x1F\u008B\x08
 http://www.huffingtonpost.com/ | name keywords    |               +
                                |                  | \x1F\u008B\x08
(2 rows)
4

0 回答 0