最近学了好多东西。因为看到了中年危机那篇文章,感觉自己不能偷懒了,必须要不断学习。好了,接下来是我在使用MySql的心得。
首先,在项目里想要使用MySql,必须添加MySql.Data.dll。只有对他引用才能使用程序连接数据库。(数据库的安装很简单,自行百度)。首先我们需要定义连接数据库的字符串:
public const string CONNECTIONSTRING = "datasource=127.0.0.1;port=3306;database=game02;user=root;pwd=root;";
datasource代表的是数据库的地址,通常服务器和数据库都是在一台机器上的,所以我们使用代表本地机器Ip的127.0.0.1。端口号为3306这是固定的,我们使用MySql Workbench打开数据库就可以看到端口号。database代表我们要访问的数据库名称,user用户名,pwd代表密码。这些都是在安装数据库的时候我们设置的。
好了,接下来是我们的数据库连接:
public static MySqlConnection Connect()
{
MySqlConnection conn=new MySqlConnection(CONNECTIONSTRING);
try
{
conn.Open();
return conn;
}
catch (Exception e)
{
Console.WriteLine("打开数据库错误!"+e);
return null;
}
}
数据库的关闭:
public static void CloseConnection(MySqlConnection conn)
{
if(conn!=null) conn.Close();
else Console.WriteLine("MySqlConnection不能为空");
}
数据的查询:
MySqlDataReader reader = null;
try
{
MySqlCommand command = new MySqlCommand("select * from user where username=@username " +
"and password=@password", conn);
command.Parameters.AddWithValue("username", username);
command.Parameters.AddWithValue("password", password);
reader = command.ExecuteReader();
if (reader.Read())
{
int id = reader.GetInt32("id");
}
}
这里要说下数据库的防注入问题。在查询语句中,我们使用username=@username来代替我们的输入参数。这是为了保护我们数据库安全。如果直接输入username=username的话,当一些用户或者恶意攻击数据库的用户将输入自己的用户名为“username=wo and delete from game01”,数据库数据将全部被删除。所以我们使用此方法来防止数据库恶意注入。
数据的删除:
MySqlCommand cmd = new MySqlCommand("delete from user where id = @id", conn);
cmd.Parameters.AddWithValue("id", 18);
cmd.ExecuteNonQuery();
数据的更新:
MySqlCommand cmd = new MySqlCommand("update user set password = @pwd,la=@la where id = 14", conn);
cmd.Parameters.AddWithValue("pwd", "sikiedu.com");
cmd.ExecuteNonQuery();
数据的插入:
MySqlCommand cmd = new MySqlCommand("insert into user set username ='" + username + "'" + ",password='" + password + "'", conn);
MySqlCommand cmd = new MySqlCommand("insert into user set username=@un , password = @pwd", conn);
cmd.Parameters.AddWithValue("un", username);
cmd.Parameters.AddWithValue("pwd", password);
cmd.ExecuteNonQuery();
好了,以上就是我们对MySql数据库的常规操作。基本会满足我们在unity上的开发。
如果本博客对你有帮助,记得点关注哦!
2018.12.20更
本次是在服务端布置一个web程序并且能和mysql连接。当时开发的时候我是在我自己本上开发,unity数据库版本应该是较低的。之前有了Mysql的一些使用,所以在这块我的开发很快。找了以前版本的MySql.Datad.dll以及连接数据库的脚本。本地测试连接没有问题。于是就部署到服务器上。网站部署完后开始安装数据库,当时就去Mysql官网下载了最新版本的数据库,8.0版本。安装一切都很顺利。安装部署设置完后,就开始测试一下连接流程。可是,webservices就是连接不上数据库。当时我很诧异,我朋友说user权限不够,我百度通过workbench设置user权限全快依然不奏效。我在mysql官网看到最新版本支持.net8,我想好高啊,我的Mysql.data.dll才是4.x的。当时我和我朋友讨论会不会是Mysql.data.dll版本过低。我朋友非常肯定的回复我:MySql不会干这种傻逼的事情,这种流失用户的操作。当时我就信了。我也没去测试换个版本dll。我朋友远程给我设置权限以及一顿操作猛如虎,依然不奏效耗了我一天时间。后来不断搜索MySql8.0的一些信息发现这个版本的数据库确实跟以前有很多不一样的东西。直到我看到一个用户的回答,我突然醒悟,之前的猜测没有错。就是dll版本问题。晕。
果然更换完dll后webservices可以正常连接数据库了。深坑!
还有我们在寻找MySql的配置文件时,在MySql安装文件下找不到。确实没有。他放在一个隐藏文件夹里。哈哈 和我们玩捉迷藏,好气。
记得在查看里勾选上显示隐藏文件。
2019.5.26更
最近又在整一点数据库的东西。我在服务器上安装完mysql后,使用navicat打开数据库发现不打开,报的错误为Client does not support authentication protocol requested by server;。百度到答案。地址:地址
打开sqlcommandline执行以下命令:
命令如下:
1、use mysql;
2、alter user 'root' identified with mysql_native_password by 'root';//密码
3、flush privileges;//刷新权限