2012-03-12 22 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%完美和有效的,它仍然可能因任何其他原因而失败。