res = PQexec(conn,"INSERT INTO worker (fullname,type) VALUES ('"ptr"',"type")");
type
是整数并且ptr
是字符串。这里有什么问题?我该如何解决?“”有问题吗
代替
res = PQexec(conn,"INSERT INTO worker (fullname,type) VALUES ('"ptr"',"type")");
使用 stringstream 创建字符串
#include <sstream>
std::stringstream ss;
ss << "INSERT INTO worker (fullname,type) VALUES ('" << ptr << "'," << type << ")";
res = PQexec(conn, ss.str().c_str() );
C++ 不会自动将值转换为字符串。要构建一个字符串,std::stringstream
请按照 claptrap 的答案中的说明使用。
但是,除非您可以完全确定变量对注入攻击是安全的,否则最好将值作为参数传递,而不是将它们直接注入 SQL,例如:
std::stringstream ss;
ss << type;
std::string type_string = ss.str(); // or std::to_string(type) if available
const char * values[] = {ptr, type_string.c_str()};
res = PQexecParams(conn, "INSERT INTO worker (fullname,type) VALUES ($1,$2)",
2, NULL, values, NULL, NULL, 0);