如何在postgresql的c ++中使用pqxx在sql查询中执行IN?

Dam*_*mir 5 c++ postgresql libpqxx c++11

如何IN使用pqxxin c++for在 sql 查询中执行postgresql?我有vector<long>id,我需要更新表学生中的每一行(设置faculty_id为一些新值)。我想避免循环,faculty当我用prepared INSERT语句插入教师时得到的新值(_id)。是否可以prepared IN使用 pqxx传递如此可迭代的结构或创建查询?

void prepareChangeFaculty(connection_base &c){
    const std::string sql =
      "UPDATE students SET faculty_id=$2 WHERE id IN $1"; // here is a problem
    c.prepare("change_faculty", sql);
}
Run Code Online (Sandbox Code Playgroud)

$1 我喜欢我需要更新的行的 id 向量

Ale*_*ros 0

为什么不在C++11 中使用类似的东西(How to concatenate a std::string and an int? )

string a="";
for (int k=0;k<myVector.size();k++){
    a += string(myVector[k]);
    if (k<myVector.size()-1){
        a += ",";
    }
}

std::string sql = "UPDATE students SET faculty_id=$2 WHERE id IN (" + a + ")";
Run Code Online (Sandbox Code Playgroud)

  • 问:“为什么不做类似的事情”?答:“因为SQL注入”!(_是_,我知道 myVector 中只会有整数;_至少,在本次开发迭代中_...) (3认同)
  • 原则上我不进行 SQL 注入(如果我可以避免的话)。正如我所说,我_知道_“myVectors”是一个整数向量(目前很难在其中注入有毒数据)。继承代码的人可以将其更改为“string”向量或“boost::variant”记录,五年后下一个使用相同代码的人将代码放入库并将其链接到一个网络服务,没有预算来进行适当的代码审查,并且该产品必须尽快推出,**BAM!**.... (2认同)