c++连接mysql数据库登陆,注册,并且获取注册用户的id

     这几天学习到了c++连接数据库,跟之前java的真的是完全不同。特别是登陆成功与否的判断问题,走了许多弯路,mysql_query()这个函数负责执行sql语句,只要sql语句没有出错就会一只返回0,所以不能凭借他的返回值来判断是否登陆成功,应该配合mysql_store_result()mysql_num_rows()来获取受影响的行数,如果查找到数据则返回1,没有查找到就返回0,可以凭借此来判断是否登陆成功。


     而注册就简单地多了,直接mysql_query()方法判断sql语句是否执行成功。


     在我的数据库如下图所示,id为主键,自增不为空,所以用户注册之后需要返回他的注册id 是多少,这时有两个方法,mysql.h里面的mysql_insert_id()方法和max(id)方法但因为后者在并发用户同时注册时返回值的正确性,所以不在此多介绍,

mysql_insert_id()定义:

mysql_insert_id() 函数返回上一步 INSERT 操作产生的 ID。

如果上一查询没有产生 AUTO_INCREMENT 的 ID,则 mysql_insert_id() 返回 0。

语法

mysql_insert_id(connection)


可以很清楚的看到这个函数的用法,结果就是返回一个值,就是用户最后后注册的id。

c++连接mysql数据库登陆,注册,并且获取注册用户的id_第1张图片

运行后的结果:

c++连接mysql数据库登陆,注册,并且获取注册用户的id_第2张图片

c++连接mysql数据库登陆,注册,并且获取注册用户的id_第3张图片

下面是源码,写的有点乱,见谅。

#include
#include
#include 
#include
using namespace std;

MYSQL_RES* result = NULL;
int connect() {//用于连接数据库并初始化
	MYSQL mysql;//必备的一个数据结构
	mysql_init(&mysql);//开辟空间
	MYSQL_RES* result = NULL;
	 //初始化数据库
	if (0 == mysql_library_init(0, NULL, NULL)) {
		cout << "mysql_library_init() succeed" << endl;
	}
	else {
		cout << "mysql_library_init() failed" << endl;
		return -1;
	}

	//初始化数据结构
	if (NULL != mysql_init(&mysql)) {
		cout << "mysql_init() succeed" << endl;
	}
	else {
		cout << "mysql_init() failed" << endl;
		return -1;
	}

	//连接数据库
	if (NULL
		!= mysql_real_connect(&mysql, "localhost", "root", "123456", "test",
			3306, NULL, 0))
		//这里的地址,用户名,密码,端口可以根据自己本地的情况更改
	{
		cout << "mysql_real_connect() succeed" << endl;
	}
	else {
		cout << "mysql_real_connect() failed" << endl;
		return -1;
	}

	//cout << "please input username" << endl;
	//string username;
	//getline(cin, username);//接收用户名
	//cout << "please input password" << endl;
	//string password;
	//getline(cin, password);//接收密码     
	//string query = "select * from test.login where username='" + username + "' and password='" + password + "'";
	//	//查询
	//mysql_query(&mysql, query.data());
	//result = mysql_store_result(&mysql);
	////cout << mysql_num_rows(result);
	////system("pause");
	//	//if (mysql_query(&mysql, query.data()))
	//if(mysql_num_rows(result))
	//	{
	//		cout << "登陆成功";
	//	}
	//	else {
	//		cout << "登陆失败";
	//	}
	//	system("pause");
	//	mysql_close(&mysql);
	//	mysql_server_end();
		
	
	cout << "please input username" << endl;
	string username;
	getline(cin, username);//接收用户名
	cout << "please input password" << endl;
	string password;
	getline(cin, password);//接收密码     
	string query = "insert into test.login values('0','" + username + "','" + password + "');";
	//string query = "insert into test.login(username,password) values('"username"','"password"');";
	//查询
	
	
	//cout << mysql_num_rows(result);
	//system("pause");
	//if (mysql_query(&mysql, query.data()))
	
	if (mysql_query(&mysql, query.data()))
	{
		cout << "插入失败";
		cout << endl;
		cout << mysql_error(&mysql);
	}
	else {
		cout << "插入成功";
		cout << endl;
		cout << "正在查询您的id" << endl;
	}
	Sleep(1000);
	cout << "还有3秒" << endl;
	Sleep(1000);//使程序暂停一秒,需包含windows.h头文件
	cout << "还有2秒" << endl;
	Sleep(1000);
	cout << "还有1秒" << endl;
	Sleep(1000);
	string fanhui = "SELECT LAST_INSERT_ID();";
	mysql_query(&mysql, fanhui.data());//用于执行sql语句,返回值为0则代表执行成功,不能借此判断是否插入或者查询成功,因为只要语句没问题都会返回0;
	int x = mysql_insert_id(&mysql);//该方法用于获取刚刚插入数据的id,赋值给x
	cout << "查询成功" << endl;
	cout << "您的id为:" << x << endl;
	system("pause");
	mysql_close(&mysql);
	mysql_server_end();

	return 0;
}
如有问题,欢迎各位指出,谢谢。

你可能感兴趣的:(随笔)