使用C ++将字符插入MYSQL表

时间:2012-03-12 14:16:48

标签: c++ mysql insert

以下代码将值插入MYSQL数据库。 如果我使用“sprintf(查询,”INSERT到t(d)值(%c)“,a);”它不会在我的数据库中插入单词hello。我也尝试在上面的陈述中使用(%s)。 但是,如果我使用“sprintf(查询,”INSERT到t(d)值(%d)“,b);”它将值1234插入数据库。

发生了什么事?为什么不将字符或字符串插入我的数据库而只插入整数?

列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);

}   

2 个答案:

答案 0 :(得分:4)

您仍然需要编写格式正确的查询。你的插入值缺少字符串:

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

您的版本正在生成类似

的内容
INSERT INTO t(d) values (foo);

几乎可以肯定,您的表没有名为foo的字段,因此查询将失败并返回“false”值。既然你没有任何错误检查,你就不会注意到事情都失败了。

从不假设查询成功。 始终检查成功/失败的返回值。即使您的SQL 100%完美且有效,它仍然可能因任何其他原因而失败。

答案 1 :(得分:2)

SQL字符串需要在单引号内:

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