VC连接mysql遇到的问题

在使用MFC尝试连接MySQL数据库时遇到了连接失败的问题,错误提示为客户端不支持服务器请求的认证协议。解决方案包括更新MySQL客户端或修改用户密码的加密方式。可以通过执行SQL命令来更新用户密码,以兼容不同的MySQL版本。
摘要由CSDN通过智能技术生成

今天用MFC连接mysql数据库,发现老是连接不上,把代码贴在控制台程序下运行,又可以运行,很奇怪。后来我把异常打印出来:Client   does   not   support   authentication   protocol   requested   by   server;   consider   upgrading   MySQL   client。在网上查了下,说是mysql新旧版本的密码算法不同引起的,用下面两种方法可以解决:

1)MySQL->SET PASSWORD FOR 'some_user'@'some_host'=OLD_PASSWORD('new_password');

     MySQL->FLUSH PRIVILEGES;

2)MySQL->UPDATE MySQL.user SET Password=OLD_PASSWORD('new_password') WHERE Host='some_host' AND User='some_user';

     MySQL->FLUSH PRIVILEGES;

MySQL 4.1/5.0 是通过 PASSWORD 加密的。我想了下,可能是我下的libmsyql.dll动态链接库是别人的,而别人的版本和我现在的版本不同,所以出现上面的情况。

连接mysql的代码大概如下:

   

    unsigned short Port = 3306;
    CString IPAddress = "localhost";
    CString UserName = "xxx";
    CString Password = "123";
    CString DBName = "mydb";
    unsigned long  i;
    MYSQL mysql;
    MYSQL_RES   *res;      
    MYSQL_ROW   row;   
    mysql_init(&mysql);
    CString error;
    if(&mysql == NULL)
    {
        error.Format("Error:   %s\n   ",   mysql_error(&mysql));   
		AfxMessageBox(error); 
        return ;
    }
    AfxMessageBox("MySQL mysql init OK. \n");
    if(!mysql_real_connect(&mysql, IPAddress, UserName, Password, DBName, Port , NULL, 0))
    {   
		error.Format("Error:   %s\n   ",   mysql_error(&mysql));   
		AfxMessageBox(error); 
        return ;
    }
    AfxMessageBox("MySQL connnect OK. \n");
    if(mysql_query(&mysql,"SELECT * FROM  user"))  
    {
        error.Format("Error:   %s\n   ",   mysql_error(&mysql));   
		AfxMessageBox(error);  
    }
    
    if( !(res = mysql_store_result(&mysql)) )  
    {
        error.Format("Error:   %s\n   ",   mysql_error(&mysql));   
		AfxMessageBox(error);   
    } 
    
    while( (row = mysql_fetch_row(res)) )
    {          
        for(i=0 ; i<mysql_num_fields(res); i++)  
        {
            CString s = row[i];
			AfxMessageBox(s);
        }    
    }      
    mysql_free_result(res);   
    if(mysql_query( &mysql,"insert into user SET name=\aabbcc\'"))  
   {
        error.Format("Error:   %s\n   ",   mysql_error(&mysql));   
        AfxMessageBox(error); 
    }
    mysql_close(&mysql);



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值