以下代码将值插入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);
}
答案 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 ---------------^--^