2012-03-12 54 views
2

下面的代碼將值插入到MYSQL數據庫中。 如果我使用「sprintf(Query,」INSERT into t(d)values(%c)「,a);」它不會將單詞hello插入到我的數據庫中。我也嘗試在上面的語句中使用(%s)。 (d)值(%d)「,b);」它將值1234插入到數據庫中。使用C++將字符插入到MYSQL表中

發生了什麼事?爲什麼不把它插入到我的數據庫中的字符或字符串,但只有整數?

d列是我的數據庫被定義爲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 2012-03-12 14:20:12

回答

2

SQL字符串必須是單引號內:

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

你仍然需要編寫格式正確的查詢。你缺乏圍繞着插入值的字符串:

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

你的版本是產生類似

INSERT INTO t(d) values (foo); 

幾乎可以肯定你的表沒有一個字段名爲foo,所以查詢將失敗,並返回「虛假「的價值。既然你沒有任何錯誤檢查,你永遠不會注意到事情失敗。

從不假設查詢成功。 總是檢查成功/失敗的返回值。即使你的SQL是100%完美和有效的,它仍然可能因任何其他原因而失敗。