为什么这个插入给出语法错误

时间:2013-04-02 13:34:56

标签: c++ sql

res = PQexec(conn,"INSERT INTO worker (fullname,type) VALUES ('"ptr"',"type")");

type是整数,ptr是字符串。这里有什么问题?我该如何解决?是否存在“”是

的问题

2 个答案:

答案 0 :(得分:1)

而不是

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() );

答案 1 :(得分:0)

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);