php数据库太小要怎么改,PHP入坑之 MySqli对数据库增删改查
PHP入坑之 MySqli对数据库增删改查
1年前
阅读 2039
评论 0
喜欢 0
###1、SQL:select查询语句
SQL语句中,`select`语句主要是用于查询读取数据表的中的记录,其语法结构有两种,
第一种是以指定读取的字段有哪些,多个字段之间使用`,`符号隔开。
```
SELECT 需要读取的字段1,需要读取的字段2,需要读取的字段3 FROM 表名称
```
第二种是使用`*`符号,表示读取所有字段:
```
SELECT * FROM 表名称'
```
注意:第二种在执行效率上要比第一种低很多,所以在实际开发中,我们都应该使用第一种查询方式,以防止查询出一些没用的数据,而浪费了内存开销。
下面我们来使用`mysqli_query()`函数,执行一下查询语句,查询`user`表。
```php
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 定义查询的SQL语句,只读取id跟name字段
$sql = "select id,name from user";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 判断是否执行成功
if ($res == false) {
echo '查询失败'; exit;
}
# 使用mysqli_fetch_all()函数可以获得查询结果,返回值是二维数组
var_dump(mysqli_fetch_all($res));
```
在实际开发中,`mysqli_query()`函数执行`select`语句只能返回一个数据实例,要将这个数据实例解开我们只能使用`mysqli_fetch_all()`函数,他的返回值是一个二维数组,
如果数据实例中查询不动记录,则返回一个空数组,而不是`false`。
其语法结构如下:
```
mysqli_fetch_all(数据实例, MYSQLI_ASSOC)
```
注意,`mysqli_fetch_all()`函数默认返回的数组是数字键名,如果你需要使用字段名做为键名,可以将第二个参数设置为`MYSQLI_ASSOC`即可,
注意,使用`mysqli_fetch_array()`函数可以只获取数据实例中的第一条数据,他的返回值是一个一维数组,特殊场景同上,
如果数据实例中查询不动记录,则返回一个空数组,而不是`false`。
语法结构同上
###2、SQL:where条件
通常很多情况下,我们想要根据某些条件进行数据查询,例如:
我们只想查出姓名叫小黄牛的用户,又或者我们只想查出年龄大于18岁的用户,
又或者我们只想查出姓名叫小黄牛,并且年龄大于20岁的用户等等。
SQL语句中提供了一个`where`关键字,用于解决这种使用场景,
其语法结构如下:
```
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
```
`where`关键词主要可以使用以下运算符:
|运算符|描述|
|:--:|:--:|
|=|等于|
|!=|不等于|
|>|大于|
|
|>=|大于等于|
|<=|小于等于|
|IN|多值等于|
|NOT IN|多值不等于|
|BETWEEN AND|在范围起始 AND 范围结束|
|NOT BETWEEN AND|不在范围起始 AND 范围结束|
|LIKE|模糊搜索|
在SQL语句中,并且是使用`AND`关键字,或者是使用`OR`关键字表示。
下面我们来查出姓名叫小黄牛,并且年龄大于20岁的用户都有哪些:
```php
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 定义查询的SQL语句,只读取id跟name字段,姓名叫小黄牛,并且年龄大于20岁
$sql = "select id,name from user WHERE name='小黄牛' AND age > 20";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 判断是否执行成功
if ($res == false) {
echo '查询失败'; exit;
}
# 使用mysqli_fetch_all()函数可以获得查询结果,返回值是二维数组
var_dump(mysqli_fetch_all($res));
```
注意,当我们的`WHERE`条件中,像上述案例中一样,带有字符串条件的时候,记得带上单引号或双引号,否则将是错误的SQL语句。
###3、SQL:order by排序
有些时候,我们想要对需要查询的数据进行排序操作,
SQL语句中提供了`ORDER BY`关键字,用于根据指定的列对结果集进行排序。
ORDER BY关键字默认按照升序对记录进行排序。
其语法结构如下:
```
SELECT 列名称 FROM 表名称 ORDER BY 字段 排序关键字
```
注意:
```
ASC排序关键字代表升序
DESC排序关键字代表降序
```
例如下面我们按照年龄,做降序查询显示:
```php
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 定义查询的SQL语句,只读取id、name跟age字段,按年龄做降序排序
$sql = "select id,name,age from user ORDER BY age DESC";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 判断是否执行成功
if ($res == false) {
echo '查询失败'; exit;
}
# 使用mysqli_fetch_all()函数可以获得查询结果,返回值是二维数组
var_dump(mysqli_fetch_all($res));
```
同时`ORDER BY`关键字,还能同时对多个字段,进行不同的排序,执行优先级是从左往右,
例如下面我们先按照年龄,做升序查询,最后再按ID编号做降序查询:
```php
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 定义查询的SQL语句,只读取id、name跟age字段,先按年龄,做升序查询,最后再按ID编号做降序查询
$sql = "select id,name,age from user ORDER BY age ASC, id DESC";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 判断是否执行成功
if ($res == false) {
echo '查询失败'; exit;
}
# 使用mysqli_fetch_all()函数可以获得查询结果,返回值是二维数组
var_dump(mysqli_fetch_all($res));
```
实际开发中,如果不是业务需要,我们不要经常使用对多个字段进行同时排序的操作,因为随着排序字段的增加,会逐渐降低查询速度。
###4、SQL:limit分页
可能很多同学之前在数据库插入数据的时候,插了很多条,在运行上面案例代码的时候就会发现,每次查询出来的数据会很多,不便于阅读。
SQL语句中提供了`LIMIT`关键字,用于分段读取数据。 其语法结构如下:
```
LIMIT 起始行数,向后读取多少行数据
```
可能很多同学看不懂上面的语法结构,不用担心,下面我们来进行几条SQL语句的讲解,这样同学们就能够读懂了:
```php
select * from user LIMIT 0,10;查询从第1行开始,累加10条id记录,共显示id为1....11
select * from user limit 5,10;查询从第6行开始向前加10条数据,共显示id为6,7....15
select * from user limit 20,10;查询从第20行开始向前加10条记录,显示id为21,22...30
```
案例:
```php
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 定义查询的SQL语句,只读取id、name跟age字段,查询从第2行开始,累加共2条记录
$sql = "select id,name,age from user LIMIT 1,2";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 判断是否执行成功
if ($res == false) {
echo '查询失败'; exit;
}
# 使用mysqli_fetch_all()函数可以获得查询结果,返回值是二维数组
var_dump(mysqli_fetch_all($res));
```
###5、SQL:where、order by、limit三者的优先级
在`select`查询语句中,`where`、`order by`、`limit`三个关键字是可以同时使用的,但对书写顺序有严格的要求:
下列关键字应该从左往右书写:
```
where
order by
limit
```
当其中一个关键字不需要使用到的时候,则往右顺延,例如下面的SQL语句组合案例:
```
select * from user WHERE id=1 ORDER BY age DESC LIMIT 0,10;
select * from user ORDER BY age DESC LIMIT 0,10;
select * from user WHERE id=1 LIMIT 0,10;
```
###6、SQL:in多值等于
很多时候,我们想查询年龄等于17,或者等于20,或者等于30的用户数据,这时候如果我们用=加OR符,就需要写很长的SQL语句。
SQL为了提供了一个`IN`关键字,用于应付优化这种查询场景。
其语法结构如下:
```
WHERE 字段名 IN (参数1, 参数2, 参数3, ...)
```
如果我们希望进行排除查询,查询年龄不等于17,或者不等于20,或者不等于30的用户数据,可以使用`NOT IN`关键字,
其语法结构如下:
```
WHERE 字段名 NOT IN (参数1, 参数2, 参数3, ...)
```
注意,`IN`关键字是用在`WHERE`关键字中,做为查询语句来使用的
下面我们来编写一个简单的案例:
```php
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 定义查询的SQL语句,查询年龄等于17,或者等于20,或者等于23的记录
$sql = "select * from user WHERE age IN (17, 20, 23)";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 判断是否执行成功
if ($res == false) {
echo '查询失败'; exit;
}
# 使用mysqli_fetch_all()函数可以获得查询结果,返回值是二维数组
var_dump(mysqli_fetch_all($res));
```
###7、SQL:between and范围
很多情况下,我们想查询年龄在15到50岁之间,就要编写像这样的SQL语句:
```
WHERE age >= 15 AND age <= 50
```
然而这种书写方式是不直观的,SQL提供了一个`BETWEEN AND`关键字,用于优化上面的使用场景:
其语法结构如下:
```
WHERE 字段名 BETWEEN 范围起始值 AND 范围结束值
```
如果我们希望进行排除查询,查询年龄不在15到50岁之间的,可以使用`NOT BETWEEN AND`关键字,
其语法结构如下:
```
WHERE 字段名 NOT BETWEEN 范围起始值 AND 范围结束值
```
注意,`BETWEEN AND`关键字是用在`WHERE`关键字中,做为查询语句来使用的
下面我们来编写一个简单的案例:
```php
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 定义查询的SQL语句,查询年龄在15到50岁之间的记录
$sql = "select * from user WHERE age BETWEEN 15 AND 50";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 判断是否执行成功
if ($res == false) {
echo '查询失败'; exit;
}
# 使用mysqli_fetch_all()函数可以获得查询结果,返回值是二维数组
var_dump(mysqli_fetch_all($res));
```
###8、SQL:like模糊搜索
`LIKE`关键字主要用于模糊搜索,带有某段内容的数据,
例如我们想查询出所有姓张的用户数据,就需要使用:
```
WHERE name LIKE '张*';这样的SQL语句。
```
`LIKE`模糊搜索还需要结合通配符来一起使用, 而上述SQL语句中使用到的`*`符号就是通配符中的一种。
下面我们先来看下`LIKE`关键字的语法结构
```
WHERE 字段名 LIKE 通配符表达式
```
下面我们再来看下,MySql中两种最常用的通配符:
|通配符|描述|
|:--:|:--:|
|*|用于表示多个字符,只能单独使用在开头或者结尾,例如张*,*仓鼠;|
|%|用于表示多个字符,可以单独使用在开头或者结尾,也可以两端同时使用,例如张%,%仓鼠,%仓%;|
|?|用于表示单个字符,例如使用小?言,那么就可以模糊搜索出小宣言、小鸡言,这样的数据;|
假设下面是`user`表中的数据:
|id|name|
|:--:|:--:|
|1|张小明|
|2|李明天|
|3|黄小天|
|4|陈明明|
|5|李大小|
下面我们通过对照上面的表,来解读各个通配符所查询出来的数据,然后理解各个通配符的具体作用和使用场景:
1、查询`name`字段中,所有以李字开头的数据,SQL语句如下:
```
select * from user WHERE name LIKE '李*';
```
也可以使用
```
select * from user WHERE name LIKE '李%';
```
2、查询`name`字段中,所有以天字结尾的数据,SQL语句如下:
```
select * from user WHERE name LIKE '*天';
```
也可以使用
```
select * from user WHERE name LIKE '%天';
```
3、查询`name`字段中,所有带明字的数据,SQL语句如下:
```
select * from user WHERE name LIKE '%天%';
```
下面我们来重点说下,通配符`*`与`%`的不同点:
我们可以使用PHP先运行下面的两段SQL看看分别出现什么结果:
```
select * from user WHERE name LIKE '*天*';
select * from user WHERE name LIKE '%天%';
```
同学们会看到:
前一条SQL语句查询出来的是所有的记录,
而后一条SQL语句查询出来的是name字段中含有天的记录,
所以说,当我们想要查询指定字段中,是否包含了某些特定的字符串时,最好使用`%`通配符,而不用`*`通配符,
`*`通配符只能在开头或者结尾时使用,而不能两端同时使用。
>老师提醒,当`%`在两端同时出现的时候,其实MySql的执行速度是非常低的,并且内存消耗也很大,所以如果不是业务需要,千万别故意使用这个查询方法。
###9、SQL:insert新增语句
一般在实际开发中,正常的情况下我们都不会使用Navicat来插入数据,而是使用SQL语句,
来将用户的一些注册登录、发布文章、购买商品等信息写入到MySql中。
`INSERT INTO`语句,用于将一行数据保存到数据库中,
其语法结构如下:
```
INSERT INTO 表名 (字段名称1, 字段名称2, 字段名称3, ...) VALUES (对应值1, 对应值2, 对应值3, ...)
```
下面,我们来编写一个小小的案例:
```php
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 定义新增数据的SQL语句
# 只写入ID编号 姓名 年龄三个字段内容,而性别字段的内容不写入,将会使用表中该字段的默认值
$sql = "INSERT INTO user (id, name, age) VALUES (100, '郑成功', 29)";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 注意:由于mysqli_query()只有在执行select查询语句时,才会返回数据实例,其他语句都是返回执行结果或者行数。
var_dump($res);
# 判断是否执行成功
if ($res == true) {
echo '写入成功'; exit;
}
echo '写入失败';
```
###10、SQL:update修改语句
之前我们已经学习过SQL的查询和新增语句了,下面我们继续来学习SQL中的修改语句;
`UPDATE`语句用于修改表中的数据;
其语法结构如下:
```php
UPDATE 表名 SET 字段名1=新值, 字段名2=新值, ... WHERE 修改条件
```
注意:当你在使用`UPDATE`修改语句时,如果没有指定`WHERE`条件,将会将整张表中所有的数据都修改掉,所以要小心使用。
```php
# 设置html页面为UTF-8编码
header("Content-type:text/html;charset=utf-8");
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 设置数据库为UTF-8编码
mysqli_query($DB, 'set names utf8');
# 定义修改数据的SQL语句
# 编写修改语句,将user表中,id大于2的全部数据,姓名改为小黄牛,年龄改成18岁
$sql = "UPDATE user SET name='小黄牛', age=18 WHERE id > 2";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 注意:由于mysqli_query()只有在执行select查询语句时,才会返回数据实例,其他语句都是返回执行结果或者行数。
var_dump($res);
# 判断是否执行成功
if ($res == true) {
echo '修改成功'; exit;
}
echo '修改失败';
```
注意:当你发现自己保存到数据库,或者是修改进数据库的数据是一些乱码字符串的时候,可以尝试在代码顶部,加入一句:
```
header("Content-type:text/html;charset=utf-8");
```
它用于声明浏览器的编码为`utf-8`,
如果还是不行的话,可以在执行SQL语句之前,先加入一句:
```
mysqli_query(数据库实例, 'set names utf8');
```
它用于声明之后的数据库操作使用`utf-8`编码的数据传输方式。
###11、SQL:delete删除语句
`DELETE FROM`关键字,用于删除表中的数据,同时该SQL语句要结合`WHERE`条件关键字一起使用,否则将会清空表中所有的数据记录。
其语法结构如下:
```
DELETE FROM 表名称 WHERE 删除条件
```
下面我们来编写一个小案例,删除所有ID编号大于20的数据:
```php
# 设置html页面为UTF-8编码
header("Content-type:text/html;charset=utf-8");
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 设置数据库为UTF-8编码
mysqli_query($DB, 'set names utf8');
# 定义删除数据的SQL语句
# 编写删除语句,将user表中,id大于20的数据全部删除
$sql = "DELETE FROM user WHERE id > 20";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 注意:由于mysqli_query()只有在执行select查询语句时,才会返回数据实例,其他语句都是返回执行结果或者行数。
var_dump($res);
# 判断是否执行成功
if ($res == true) {
echo '删除成功'; exit;
}
echo '删除失败';
```
###12、SQL:Join多表关联
在实际开发中,一个可能会有许多个字段用于保存用户的资料信息,同时为了加快数据的读取速度,
我们往往会将这些数据按常用和不常用分类,从而分成2个数据表进行保存。
`user`表用于保存常用信息,我们称之为主表,
`user_data`表用于保存不常用信息,我们称之为附表,同时该表里有一个字段用于保存user表中的id编号,然后通过这个id编号,我们可以使用JOIN语句,将2个表中的数据关联起来一起做SELECT操作。
注意:只有主表中的id编号设置为主键,在执行`JOIN`多表关联时,速度才会快,否则将查询速度将会很慢。
假设我们现在有以下两张表:
```
user主表,
user_data附表
```
|user主表| | | |
|:--:|:--:|:--:|:--:|
|id|name|sex|age|
|1|小黄牛|男|22|
|2|宣言|变性|20|
|3|小仓鼠|女|18|
|user_data附表|||
|:--:|:--:|:--:|
|pid|address|auto|
|1|广东广州白云|我是一只帅气的黄牛!|
|2|广东广州天河|很幼稚的一只宣言!|
|3|广东广州花都|大仓鼠一头!|
注意:`JOIN`语句,是`SELECT`查询语句中的一种条件关联关键字,它主要有4种类型的关联方式:
下面我们列出了可以使用的 `JOIN` 语法,以及它们之间的差异。
```
INNER JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
```
(上面所说的行,即表示一行数据)
其语法结构如下:
```
SELECT A.字段, B.字段 FROM A表 AS 别名 LEFT JOIN B表 AS 别名 ON A.字段 = B.字段
```
很多同学看上面的格式,可能无法理解这条SQL的语法结构,如果我们结合上面的2张表一起使用,然后编写一条SQL语句就可以理解了:
```
SELECT A.*, B.address, b.auto FROM user AS A LEFT JOIN user_data AS B ON A.id = B.pid
```
上面的SQL可以解读为:
```
查询出来的信息只要主表中的全部字段,跟附表中的address、auto字段,
user表启用别名为A
左关联的方式链接附表
user_data表的启用别名为B
关联字段为A表的id等于B表的pid
```
下面为`user_data`表的结构,同学们可自行创建该表做练习:
```php
CREATE TABLE `user_data` (
`pid` int(11) NOT NULL,
`address` varchar(50) DEFAULT NULL COMMENT '地址',
`auto` varchar(50) DEFAULT NULL COMMENT '简介'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='会员附表';
```
下面我们来使用PHP代码,执行上面的SQL语句:
```php
# 使用MySqli连接数据库
$DB = mysqli_connect('127.0.0.1', 'root', 'root', 'love_niu', 3306);
# 定义JOIN关联查询的SQL语句
$sql = "SELECT A.*, B.address, b.auto FROM user AS A LEFT JOIN user_data AS B ON A.id = B.pid";
# 使用mysqli_query()执行SQL语句
$res = mysqli_query($DB, $sql);
# 判断是否执行成功
if ($res == false) {
echo '查询失败'; exit;
}
# 使用mysqli_fetch_all()函数可以获得查询结果,返回值是二维数组
var_dump(mysqli_fetch_all($res));
```
© 著作权归作者所有
php数据库太小要怎么改,PHP入坑之 MySqli对数据库增删改查相关推荐
- Android复习07【创建数据库、insert()插入数据、查看数据库、根据列索引获取参数值、根据列名-返回索引、增删改查数据、数据分页、修改表结构、Room框架】
2020-04-09-星期四-第八周 目 录 创建数据库 insert()方法 查看数据库(Save as保存) 菜鸟教程---SQLite数据库 根据 列索引 获取 参数值 列比较多---根据列 ...
- mysql修改i数据库名_数据库操作之mysqli语句的增删改查0424/14:36
基本的数据库操作 函数 mysqli_connect()连接数据库 mysqli_errno()错误编码 mysqli_error() 错误信息 mysqli_connect_errno() 数据库上 ...
- 系统增删查改的软件测试,软件测试人员必掌握的增删改查之简单查询
导读 软件测试人员在工作使用SQL语言中的查询是使用得最多的,而查询也是SQL语言中最复杂的,很多测试人员只使用到其中最简单的查询 1.数据库的使用 现在在任何项目中都有数据库存在,那么在测试过程中查 ...
- java中的数组增删查改操作,java数组实现增删改查
java 实现动态数组,Java工具类Arrays中不得不知的常用方法,数组实现队列java,java数组实现增删改查 java 增删改查代码 import java.sql.Connection; ...
- Springboot+vue 增删改查的小项目
Springboot+vue 增删改查的小项目 文章目录 Springboot+vue 增删改查的小项目 前言 源码 1. 介绍 2.核心功能 3.软件架构 3.1 目录结构 4.项目流程 4.1导入 ...
- 【java】用javaSE来实现对mysql数据库的增删改查
主程序: import Bean.StudentBean; import Impl.StudentImpl; public class T7 { public static void main ...
- web端获取微信小程序云数据库数据实现增删改查等操作
获取小程序数据库 前言 一.微信小程序Web SDK 1.微信官方示例 2.未登录模式注意事项 二.完整流程演示 1.开启云数据库访问权限 2.编写云函数 3.web前端引入js 4.web页面js访 ...
- 微信小程序调用数据库增删改查
微信小程序调用数据库增删改查 php代码 获得数据库全部数据 js代码 增 wxml页面 js代码 删 js代码 改 js代码 查 js代码 输出展示 不足&改进想法 php代码 <?p ...
- laravel mysql增删改查_Laravel框架数据库操作的增删改三种方式 阿星小栈
Laravel提供了3种操作数据库方式:DB facade(原始方式).查询构造器和Eloquent ORM. 数据库的配置文件在config目录下的database.php里.打开这个文件,找到my ...
- javaweb简单的登录增删改查系统_利用python操作小程序云数据库实现简单的增删改查!
不止python,你可以利用任何语言那实现通过http请求来操作你自己的小程序云数据库了 背景 也是在最近吧,小程序更新了云开发 HTTP API 文档,提供了小程序外访问云开发资源的能力,使用 HT ...
最新文章
- 删除 shiro url 上的JSESSIONID
- Android系统中设置TextView等的行间距
- wcf寄宿iis7是的 500错误
- __cdecl __stdcall区别-转
- 百度翻译接口测试(2)
- 【英语学习】【医学】Unit 03 Blood
- 梅创社c语言答案,c语言程序设计第2版) 教学课件 作者 梅创社答案 第四章答案.docx...
- linux amp;amp; ; amp;amp;amp;amp; ||
- ajax请求传递参数的方式,Ajax请求 一般处理程序参数传递的几种方式
- Kubernetes集群如何重启
- Undefined variable 'raw_input'pylint(undefined-variable)
- 基于51单片机+LD3320语音模块+SYN6288语音合成——语音识别智能分类垃圾桶
- dijkastra算法实践poj2387
- 学习进制及数据在计算机中的表示
- CallBack函数调用
- 基于微信小程序菜谱小程序毕业设计开题报告功能参考
- 一个简单的BitTorrent客户端实现(二):种子文件解析及信息保存
- ar unity 小程序_unity可以写微信小程序吗?
- vue中使用hover.css动画
- 2019全国大学生信息安全竞赛初赛writeup