mysql中想更新一个用户的密码,但该16位密码中包含数值为128的字符,插入操作失败,
 uint8 psw[16] = {128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128};
 在调用mysql_real_query前用mysql_real_escape_string对psw进行了转换,但还是失败,
貌似mysql_real_escape_string不能对数值为128的字符串进行处理?
想请问,如果密码中包含数值为128,该如何插入?

解决方案 »

  1.   

    MYSQL_ROW row;
    MYSQL_RES *result =NULL;

    char ch_query[1024];
        unsigned char temp[16] = {128,128,128,128,49,128,49,49,49,49,49,49,49,49,49,49};
    char psw[100];
    int len = mysql_real_escape_string(&mysql,psw,(char*)temp,16);
    char *pQuery;
    pQuery = ch_query;
    pQuery += sprintf(pQuery, "update userslist");
    pQuery += sprintf(pQuery, " set Psw = \"");
    memcpy((void*)pQuery, (void*)psw,len);
    pQuery+=len;
    pQuery += sprintf(pQuery, "\"");  
    pQuery += sprintf(pQuery, "  where UserID = %u",1);
    if (mysql_real_query(&mysql,ch_query,pQuery - ch_query)!=0)
    {
    printf("%s\n",mysql_error(&mysql));

    printf("失败\n");
    }
    else
    {
    printf("成功\n");

    }
    代码如上所示,
    输出如下:
    Incorrect string value: '\x80\x80\x80\x801\x80...' for column 'Psw' at row 1
    失败
    Press any key to continue