mysql_real_escape_string (&m_stLDBLink.stMysqlConn.stMysql, szChunk, (const char*)szTempBuffer, nPropBufferLen);
sprintf( m_stLDBLink.sQuery, "update privatepropsinfo set propsbuffer = '%s' where uin = %llu and gametype = %d", szChunk, iUin, nGameType);
TLib_DB_ExecSQL( &m_stLDBLink, sErrMsg );(内部封装的函数---->执行sql语句)
先将二进制流转换为字符串,因为在执行sql语句时,程序会以字符串结束符作为sql语句的结束标志,然后再调用函数执行sql语句。
方式二:使用存储过程----在windows下没有生效
if ((stmt = mysql_stmt_init (&m_stLDBLink.pstCurMysqlConn->stMysql)) == NULL)
{
TLib_Log_LogMsg ("mysql_stmt_init() failed.\n");
return -1;
}
snprintf (strSql, 2047, "call UpdateGamePoints(%llu,%d,%d,%d,%d,%d,%d,?)",
iUin, nGameType, pstGameCfg->m_gameInfo.m_iPoints,
pstGameCfg->m_gameInfo.m_iWinNum,
pstGameCfg->m_gameInfo.m_iLossNum,
pstGameCfg->m_gameInfo.m_iEqualNum,
pstGameCfg->m_gameInfo.m_iEscNum);
if (mysql_stmt_prepare (stmt, strSql, (unsigned long) strlen (strSql)) != 0)
{
TLib_Log_LogMsg ("mysql_stmt_prepare failed!\n");
mysql_stmt_close (stmt);
stmt = NULL;
return -1;
}
unsigned long len_content = nMedalLen;
bind[0].buffer_type = FIELD_TYPE_BLOB;
bind[0].buffer = pstGameCfg->m_byMedal;
bind[0].buffer_length = nMedalLen;
bind[0].length = &len_content;
if (mysql_stmt_bind_param (stmt, bind) != 0)
{
TLib_Log_LogMsg ("mysql_stmt_bind_param failed!\n");
mysql_stmt_close (stmt);
stmt = NULL;
return -1;
}
if (mysql_stmt_execute (stmt) != 0)
{
TLib_Log_LogMsg ("mysql_stmt_execute () failed!\n");
mysql_stmt_close (stmt);
stmt = NULL;
return -1;
}
mysql_stmt_close (stmt);
stmt = NULL;