2016-11-30 4 views
0

データベーステーブルに値を挿入するC++プログラムがあります。データが常に更新されているため、値を直接ハードコードすることはできませんが、構文については本当に混乱しています。私はこれをしようとすると は:PostgreSQLを使用してC++でデータベーステーブルに変数を挿入するにはどうすればよいですか?

l.exec("INSERT INTO course VALUES(cid, term, 'subj',crse, sec, 'units', 'instructors');"); 
      l.exec("INSERT INTO meeting VALUES(cid, term, 'type', 'days', 'time', 'build', room);"); 
      l.exec("INSERT INTO enrolledin VALUES(cid, term, sid, 'major', 'classlevel', 'level', 'status', seat, numunits, 'grade');"); 
      l.exec("INSERT INTO student VALUES(sid, 'surname', 'prefname', 'email');"); 

I get this error: 
terminate called after throwing an instance of 'pqxx::undefined_column' 
    what(): ERROR: column "cid" does not exist 
LINE 1: INSERT INTO course VALUES(cid, term, 'subj',crse, se... 

          ^
HINT: There is a column named "cid" in table "course", but it cannot be referenced from this part of the query. 

- 私が代わりに、文字列内の値の文字列リテラル名を挿入したため、それはだ、と私は挿入する方法へと困惑していると言われました変数名を使用しながらC++経由で文字列内の値を取得します。

+0

申し訳ありませんが、mysqlタグを削除しました – user5943954

答えて

0

使用されたSQL INSERTクエリの構文が正しくありません。

テーブル名は、挿入する列とその後の値を指定する必要があります。私は簡単にするために列の数を減らしました。 INSERTの完全な構文については、PostgreSQL documentationを確認してください。

では、次の操作を行うことができますあなたの変数から値を挿入するには:

int cidValue = 1; 
std::string subjValue = "subj"; 

l.exec("INSERT INTO course (cid, subj) VALUES(" + std::to_string(cidValue) + ", '" + l.esc(subjValue) + "')"); 

esc()機能は、SQLインジェクション攻撃を防ぐのに役立ちます。

+0

挿入時に一重引用符を使用する場合、二重引用符を使用する場合はいつですか? cidは整数、subjは文字列ですか?どのタイプを一重引用符で囲みますか? – user5943954

+0

@ user5943954二重引用符は[C++文字列リテラル](http://en.cppreference.com/w/cpp/language/string_literal)の指定に使用されます。 SQLクエリの文字列値にはシングルクォートが必要です。 – Nikita

+1

あなたは非常に助けてくれました、ありがとう! – user5943954

関連する問題