mysql中更新(update)blob字段
mysql_stmt_init() 通过将问号字符“?”嵌⼊到SQL字符串的恰当位置,应⽤程序可包含SQL语句中的⼀个或多个参数标记符。标记符仅在SQL语句中的特定位置时才是合法的。例如,它可以在INSERT语句的VALUES()列表中(为⾏指定列值),或与WHERE⼦句中某列的⽐较部分(⽤以指定⽐较值)。但是,对于ID(例如表名或列名),不允许使⽤它们,不允许指定⼆进制操作符(如等于号“=”)的。后⼀个限制是有必要的,原因在于,⽆法确定参数类型。⼀般⽽⾔,参数仅在DML( )语句中才是合法的,在DDL( )语句中不合法。执⾏语句之前,必须使⽤mysql_stmt_bind_param(),将参数标记符与应⽤程序 在⼀起。从上⾯可以看出使⽤"update 表名 set 字段 = ? where uin = x"时期中的问号是不合法的,可以在预处理中使⽤存储过程"call UpdatePrivatePropsInfo(nUin,  ?)"该存储过程的过程体:【
begin
update 表名 set 待更新字段 = value where uin = x;
end
注意:如果待更新字段是⼆进制数据块类型(如:blob)需要区分平台,开发测试在windows下使⽤的my
sql(version 5.5.20 InnoDB)发布在centos linux下使⽤的mysql (version 5.1.69)
⽅式⼀:简单数据操作语句----这种⽅式在两个平台都有效
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;
sql中update什么意思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;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。