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

typeは整数で、ptr文字列です。ここで何が問題なのですか?どうすれば修正できますか?「」に問題はありますか

4

2 に答える 2

1

それ以外の

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

文字列ストリームを使用して文字列を作成します

#include <sstream>
std::stringstream ss;

ss << "INSERT INTO worker (fullname,type) VALUES ('" << ptr << "'," << type << ")";
res = PQexec(conn, ss.str().c_str() );
于 2013-04-02T13:40:11.113 に答える
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);
于 2013-04-02T13:53:16.760 に答える