2012-03-12 12 views
2

以下のコードは、MYSQLデータベースに値を挿入します。 "sprintf(クエリ、" t(d)の値(%c)にINSERT "、a);"それは私のデータベースに単語helloを挿入しません。私も上記のステートメントで(%s)を使ってみました。しかし、もし私が "sprintf(クエリ、" INSERTをt(d)の値(%d) "、b)に使用すると、値1234をデータベースに挿入します。C++を使用してMYSQLテーブルに文字を挿入

何が起こっていますか?なぜ文字や文字列をデータベースに挿入するのですか?整数だけですか?

列dがmyデータベースはchar型として定義されています。

ありがとうございました。

#include "stdafx.h" 
#include <stdio.h> 
#include <mysql.h> 
//#include <string> 
//using std::string; 
//#include <atlstr.h> 

MYSQL *pConnection; 
MYSQL_RES *pResult=NULL; 
MYSQL_ROW Row; 
char Query[256]; 

int main(int argc, char* argv[]) 
{ 
    pConnection = mysql_init(NULL); 

    mysql_real_connect(pConnection,"localhost","root","y123","test",0,NULL,0); 

char a[] ="Hello"; 
int b = 1234; 
printf("%s", a); 

sprintf(Query, "INSERT into t(d) values (%s)", a); 
mysql_query(pConnection, Query); 

} 
+0

あなたはどのタイプですか?挿入しようとしていますか? – aambrozkiewicz

答えて

2

SQL文字列は、単一引用符の内側にする必要があります:あなたはまだ適切にフォーマットされたクエリを記述する必要が

sprintf(Query, "INSERT into t(d) values ('%s')", a); 
// Note the single quotes ---------------^--^ 
4

。あなたは、挿入された値の周りに文字列を欠いている:あなたのバージョンはほぼ確実

INSERT INTO t(d) values (foo); 

のようなものを生成していました

sprintf(Query, "INSERT into t(d) values ('%s')", a); 
             ^--^-- missing 

あなたのテーブルには、fooという名前のフィールドを持っていないので、クエリは "を失敗し、返します偽の値です。あなたは何のエラーもチェックしていなかったので、失敗していることに気付かなかったでしょう。

NEVERクエリが成功したとします。 常に成功/失敗の戻り値をチェックします。あなたのSQLが100%完璧で有効であっても、他の多くの理由でそれでも失敗する可能性があります。

関連する問題