#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int entity_type = 6;
char* szStrType;
szStrType = (char*) malloc(20*sizeof(char));
unsigned long len = strlen(szStrType);
unsigned long real_len[4];
real_len[0]=0;
strcpy(szStrType, "4");
char szSql[1024];
char szDbType[30];
char szDbServer[30];
char szDbName[30];
int nPort;
char szUserName[100];
char szPassWord[100];
char szId[100];
char szAutoCfg[100];
char szTime1[50];
char szTime2[50];
MYSQL_BIND paramBind[1];
MYSQL_BIND resultBind[2];
//memset(resultBind, 0, sizeof(resultBind));
//memset(paramBind, 0, sizeof(paramBind));
//strcpy(szSql, "SELECT Price_ID, Auto_Cfg_Child_Price, Effect_Datetime, Expire_Datetime FROM Price_Instance WHERE Entity_Type_ID= ? and Entity_ID = 1");
strcpy(szSql, "SELECT Price_ID, Price_Name FROM Price_Instance WHERE Entity_Type_ID= ? and Entity_ID = 1");
strcpy( szDbType, "mysql" );
strcpy( szDbServer, "110.183.120.8" );
strcpy( szDbName, "sgb" );
nPort = 3306;
strcpy(szUserName, "st_it" );
strcpy( szPassWord, "sr" );
MYSQL* dbHandle=NULL ;
dbHandle = mysql_init(dbHandle );
dbHandle = mysql_real_connect(dbHandle, szDbServer,
szUserName, szPassWord,
szDbName, nPort , NULL, 0);
if (NULL == dbHandle )
{
return 1;
}
MYSQL_STMT* hStmt = mysql_stmt_init(dbHandle);
if (NULL == hStmt )
{
return 1;
}
int err = mysql_stmt_prepare(hStmt , szSql, strlen(szSql));
paramBind[0].buffer_type= MYSQL_TYPE_LONG;
paramBind[0].buffer= (char *)&entity_type;
paramBind[0].is_null= 0;
paramBind[0].length= 0;
char bErr = mysql_stmt_bind_param( hStmt, paramBind );
err = mysql_stmt_execute( hStmt );
memset(szId, 0, sizeof(szId));
resultBind[0].buffer= (char*)szId;
resultBind[0].buffer_length= sizeof(szId);
resultBind[0].buffer_type = MYSQL_TYPE_STRING;
resultBind[0].length = &real_len[0];
resultBind[1].buffer= (char*)szAutoCfg;
resultBind[1].buffer_length= sizeof(szAutoCfg);
resultBind[1].buffer_type = MYSQL_TYPE_STRING;
resultBind[1].length = &real_len[1];
my_bool strerr = mysql_stmt_bind_result(hStmt, resultBind );
err = mysql_stmt_store_result(hStmt );
int resultNum =0;
resultNum = mysql_stmt_num_rows( hStmt );
err = mysql_stmt_fetch( hStmt );
mysql_stmt_free_result(hStmt);
mysql_stmt_close(hStmt);
mysql_close(dbHandle);
free(szStrType);
szStrType = NULL;
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int entity_type = 6;
char* szStrType;
szStrType = (char*) malloc(20*sizeof(char));
unsigned long len = strlen(szStrType);
unsigned long real_len[4];
real_len[0]=0;
strcpy(szStrType, "4");
char szSql[1024];
char szDbType[30];
char szDbServer[30];
char szDbName[30];
int nPort;
char szUserName[100];
char szPassWord[100];
char szId[100];
char szAutoCfg[100];
char szTime1[50];
char szTime2[50];
MYSQL_BIND paramBind[1];
MYSQL_BIND resultBind[2];
//memset(resultBind, 0, sizeof(resultBind));
//memset(paramBind, 0, sizeof(paramBind));
//strcpy(szSql, "SELECT Price_ID, Auto_Cfg_Child_Price, Effect_Datetime, Expire_Datetime FROM Price_Instance WHERE Entity_Type_ID= ? and Entity_ID = 1");
strcpy(szSql, "SELECT Price_ID, Price_Name FROM Price_Instance WHERE Entity_Type_ID= ? and Entity_ID = 1");
strcpy( szDbType, "mysql" );
strcpy( szDbServer, "110.183.120.8" );
strcpy( szDbName, "sgb" );
nPort = 3306;
strcpy(szUserName, "st_it" );
strcpy( szPassWord, "sr" );
MYSQL* dbHandle=NULL ;
dbHandle = mysql_init(dbHandle );
dbHandle = mysql_real_connect(dbHandle, szDbServer,
szUserName, szPassWord,
szDbName, nPort , NULL, 0);
if (NULL == dbHandle )
{
return 1;
}
MYSQL_STMT* hStmt = mysql_stmt_init(dbHandle);
if (NULL == hStmt )
{
return 1;
}
int err = mysql_stmt_prepare(hStmt , szSql, strlen(szSql));
paramBind[0].buffer_type= MYSQL_TYPE_LONG;
paramBind[0].buffer= (char *)&entity_type;
paramBind[0].is_null= 0;
paramBind[0].length= 0;
char bErr = mysql_stmt_bind_param( hStmt, paramBind );
err = mysql_stmt_execute( hStmt );
memset(szId, 0, sizeof(szId));
resultBind[0].buffer= (char*)szId;
resultBind[0].buffer_length= sizeof(szId);
resultBind[0].buffer_type = MYSQL_TYPE_STRING;
resultBind[0].length = &real_len[0];
resultBind[1].buffer= (char*)szAutoCfg;
resultBind[1].buffer_length= sizeof(szAutoCfg);
resultBind[1].buffer_type = MYSQL_TYPE_STRING;
resultBind[1].length = &real_len[1];
my_bool strerr = mysql_stmt_bind_result(hStmt, resultBind );
err = mysql_stmt_store_result(hStmt );
int resultNum =0;
resultNum = mysql_stmt_num_rows( hStmt );
err = mysql_stmt_fetch( hStmt );
mysql_stmt_free_result(hStmt);
mysql_stmt_close(hStmt);
mysql_close(dbHandle);
free(szStrType);
szStrType = NULL;
return 0;
}
红色加粗那部分代码如果注释掉,就会导致程序core dump, 是不是mysql会使用其中的bind 结构体中未经初始化的数据呢?