簡體   English   中英

如何在 pqxx7 中使用動態參數執行 sql

[英]How to exec the sql with dynamic params in pqxx7

我想用動態參數執行 sql

我可以在 pqxx4 中找到如下代碼

work txn(*conn);
pqxx::result r = txn.prepared("insert into mytable (a,b,c,d,e) values (1,2,$1,$2,$3)")(person_name)(age)(sex).exec();
txn.commit();

但是我用的是7版本的pqxx,代碼不支持。

那么如何在 pqxx7 中使用動態參數執行 sql?

using FieldValue = std::variant<int32_t, int64_t, float, double, std::string, bool>

std::string tableName = "mytable";
std::vector<std::string> columNames{"a", "b", "c", "d", "e", ...};
std::vector<FieldValue >{1, "", 2, "", 5L ...};

std::string sql = "INSERT INTO \"" + tableName + "\"(";
for (int i = 0; i < colums.size(); i++)
{
  if (i > 0)
  {
    sql += ", ";
  }
  sql += colums[i];
}
sql += " ) VALUES ( ";
for (int i = 0; i < colums.size(); i++)
{
  if (i > 0)
  {
    sql += ", ";
  }
  sql += "$" + std::to_string(i + 1);
}
sql += " )";

pqxx::connection conn{...};
conn.prepare("test", sql);
pqxx::work work(conn);


怎么做?

我認為您正在尋找的是准備好的聲明的文檔部分(抱歉沒有鏈接,因為它不斷變化)

pqxx::connection conn;
conn.prepare("insert_statement", "insert into mytable(a, b, c, d, e) values (1, 2, $1, $2, $3)");

然后在稍后的某個時間點:

pqxx::transaction txn(conn);
txn.exec_prepared("insert_statement", field_value3, field_value4, field_value5);

如果您要插入字符串,請使用:

txn.esc(field_value)

執行准備好的語句有多種不同的方法,但這與我目前在 libpqxx 7.x 中使用的方法相似。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM