我正在尝试将 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)