mysqli php 教案,PHP基础 —— mysqli学习

建立,关闭与MySQL服务器的连接

连接指定的mysql服务器

$mysqli_content = mysqli_connect($host,$user,$password,$database,$port,$socket)

$host —— ip地址,服务器的地址

$user —— 用户名,root

$password —— MySQL的密码

$database —— 数据库

$port —— 端口号,一般默认3306

$socket —— 使用很少,基本不用

$link = @mysqli_connect('localhost','root','root','php1',3306);

?>

//由于会出现错误,为防止错误信息直接暴露在页面,可以使用@屏蔽错误

连接错误时的提示

int mysqli_connect_errno();

// 返回最后一次连接调用的错误代码

string mysqli_content_error();

//返回一个字符串描述的最后一次连接调用的错误代码

密码或用户名错误的报错:

echo mysqli_connect_error();

//Access denied for user 'root'@'localhost' (using password: YES)

echo mysqli_connect_errno($link);

//1045

0 —— 表示连接成功

设置默认字符编码

bool mysqli_set_charset(mysqli $link , string $charset);

设置成功返回 true

mysqli_set_charset($link,'GBK');

mysqli_set_charset($link,'utf8');//注意 utf-8 省略 ‘-’

选择特定的数据库

bool mysqli_select_db(mysqli $link,string $dbname);

$link —— 建立的连接,mysqli_connect()

$abname —— 数据库名称

当没有指定数据库时,可以用此函数添加数据库

当指定数据库,需要切换数据库:

mysqli_select_db($link,$php2);

关闭与mysql服务器的连接

bool mysqli_close(mysqli $link);

$link —— 建立的连接,mysqli_connect()

mysqli_close($link);

执行mysql语句

mysqli_query()

在数据库中执行一条MySQL语句

mysqli_query(mysqli $link ,string $query,[int $resultmode = MYSQLI_STORE_RESULT]);

$link —— 建立的连接,mysqli_connect()

$query —— 查询字符串

$resultmode —— 决定获取结果的方式,可取值:

MYSQLI_USE_RESULT :mysqli_fetch_array()每次都要向server请求结果行,在执行MySQL时,并没有从server将结果取出

MYSQLI_STORE_RESULT :默认值(较常用的),具体结果一次性返回给客户端(PHP),相当于本地取数据

d5e082bc2b3e

可选参数

对于delete,update,insert等不会返回数据的SQL语句,执行没有错误将返回true

// 创建表

$str = 'create table p3 (id int auto_increment primary key ,name varchar(10),class int(4),age int(3));';

var_dump(mysqli_query($link,$str));//true

// 添加数据

$str = 'insert into p3 (name,class,age) values ("Yz",1526,25),("Zs",1506,20),("Ys",1515,22);';

var_dump(mysqli_query($link,$str));//true

// 删除表

echo "
";

$str = 'drop table p3;';

var_dump(mysqli_query($link,$str));//true

对于返回数据的SQL语句,执行成功的时候返回结果 对象集合,可以使用操作结果 对象集合 的函数来从中获取数据

// 查询

$str = 'select * from p3';

$result = mysqli_query($link,$str);

var_dump($result);

//object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(4) ["lengths"]=> NULL ["num_rows"]=> int(3) ["type"]=> int(0) }

mysqli_real_query()

执行一个mysql查询

mysqli_real_query ( mysqli $link , string $query ) : bool

$link —— 建立的连接,mysqli_connect()

$query —— 查询字符串

返回值:成功时返回 true, 否则返回 false。

$str = 'select * from p3';

$result = mysqli_real_query($link,$str);

var_dump($result);//true

若想获取数据,需要使用 mysqli_store_result()

mysqli_store_result()

转移上一次查询返回的 结果集合(对象集合)

mysqli_store_result ( mysqli $link, [ int $option ] ) : mysqli_result

$option —— 可以取值 :

MYSQLI_STORE_RESULT_COPY_DATA 将结果集从 mysqlnd 的内部缓冲区复制到 PHP 变量中

默认情况下,mysqlnd 采取一种引用策略尽量避免在内容中复制多份同样的结果集。

例如:

if(mysqli_real_query($link,$str))

{

$result = mysqli_store_result($link,MYSQLI_STORE_RESULT_COPY_DATA);

}

print_r($result);//mysqli_result Object ( [current_field] => 0 [field_count] => 4 [lengths] => [num_rows] => 3 [type] => 0 )

执行MySQL语句报错

int mysqli_errno(mysqli $link); —— 返回报错数字码

string mysqli_error(mysqli $link); —— 返回报错内容

$str = 'create table p3 (id int auto_increment primary key ,name varchar(10),class int(4),age int(3));';

var_dump(mysqli_query($link,$str));

echo mysqli_errno($link).":".mysqli_error($link);//1050:Table 'p3' already exists , p3表已存在

$str = 'insert into p3 values ("Yz",25);';

var_dump(mysqli_query($link,$str));

echo mysqli_errno($link).":".mysqli_error($link);//1136:Column count doesn't match value count at row 1 , 列数与第1行的值数不匹配

mysqli_multi_query()

一次性执行多条SQL语句,多条SQL语句用逗号分隔

mysqli_multi_query ( mysqli $link , string $query ) : bool

$query —— 多条SQL语句。

返回值:当第一条语句执行就返回true

mysqli_multi_query($link,"create table p2 (id int auto_increment primary key , class varchar(15));insert into p2 (class) values (20180612515),(20180612506),(20180612525);");

mysqli_next_result

为读取 multi_query 执行之后的下一个结果集做准备

mysqli_next_result ( mysqli $link ) : bool

mysqli_multi_query() 函数执行之后, 为读取下一个结果集做准备, 然后可以使用 mysqli_store_result() 或 mysqli_use_result() 函数读取下一个结果集。

操作结果 对象集合 的函数

mysqli_fetch_row()

以索引数组的方式获取一条记录

mixed mysqli_fetch_row(mysqli_result $result);

$result —— 查询到的结果,形成的对象集合

返回值为array,每次返回一行MySQL的数据,从左到右保存在数组中

索引值为数字,从左到右从0开始

print_r(mysqli_fetch_row($result));//Array ( [0] => 1 [1] => Yz [2] => 1526 [3] => 25 )

print_r(mysqli_fetch_row($result));//Array ( [0] => 2 [1] => Zs [2] => 1506 [3] => 20 )

print_r(mysqli_fetch_row($result));//Array ( [0] => 3 [1] => Ys [2] => 1515 [3] => 22 )

mysqli_fetch_assoc()

以关联数组的方式获取一条记录的数据

array mysqli_fetch_assoc(mysqli_result $result);

$result —— 查询到的结果,形成的对象集合

返回值为array,每次返回一行MySQL的数据,从左到右保存在数组中

索引值为MySQL表的列字段

print_r(mysqli_fetch_assoc($result));//Array ( [id] => 1 [name] => Yz [class] => 1526 [age] => 25 )

print_r(mysqli_fetch_assoc($result));//Array ( [id] => 2 [name] => Zs [class] => 1506 [age] => 20 )

print_r(mysqli_fetch_assoc($result));//Array ( [id] => 3 [name] => Ys [class] => 1515 [age] => 22 )

mysqli_fetch_array()

以索引数组或关联数组的方式获取一条记录

mixed mysqli_fetch_array(mysqli_result $result,[$resulttype = MYSQLI_BOTH]);

$result —— 查询到的结果,形成的对象集合

$resulttype —— 可取值为:

MYSQLI_ASSOC :索引值为 MySQL列字段

MYSQLI_NUM : 索引值为数字

MYSQLI_BOTH : 默认值,索引值为数字和MySQL列字段

返回值为array,每次返回一行MySQL的数据,从左到右保存在数组中

默认情况下 —— 索引值为数字和MySQL列字段,每行每列先存储数字索引,然后是MySQL列字段索引,接着下一列······

print_r(mysqli_fetch_array($result));//Array ( [0] => 1 [id] => 1 [1] => Yz [name] => Yz [2] => 1526 [class] => 1526 [3] => 25 [age] => 25 )

print_r(mysqli_fetch_array($result,MYSQLI_NUM));//Array ( [0] => 2 [1] => Zs [2] => 1506 [3] => 20 )

print_r(mysqli_fetch_array($result,MYSQLI_ASSOC));//Array ( [id] => 3 [name] => Ys [class] => 1515 [age] => 22 )

mysqli_fetch_all()

以索引数组或关联数组的方式获取全部记录的数据

mixed mysqli_fetch_all ( mysqli_result $result [, int $resulttype = MYSQLI_NUM ] ) ;

$result —— 查询到的结果,形成的对象集合

$resulttype —— 可取值为:

MYSQLI_ASSOC :索引值为 MySQL列字段

MYSQLI_NUM : 索引值为数字

MYSQLI_BOTH : 默认值,索引值为数字和MySQL列字段

返回值查询结果的所有数据,每一行组成一个数组,所有行组成一个二维数组

索引值为MySQL列字段

print_r(mysqli_fetch_all($result,MYSQLI_ASSOC));

//Array ( [0] => Array ( [id] => 1 [name] => Yz [class] => 1526 [age] => 25 ) [1] => Array ( [id] => 2 [name] => Zs [class] => 1506 [age] => 20 ) [2] => Array ( [id] => 3 [name] => Ys [class] => 1515 [age] => 22 ) )

索引值为数字,默认情况

//print_r(mysqli_fetch_all($result));

print_r(mysqli_fetch_all($result,MYSQLI_NUM));

//Array ( [0] => Array ( [0] => 1 [1] => Yz [2] => 1526 [3] => 25 ) [1] => Array ( [0] => 2 [1] => Zs [2] => 1506 [3] => 20 ) [2] => Array ( [0] => 3 [1] => Ys [2] => 1515 [3] => 22 ) )

索引值为数字和MySQL列字段,每行每列先存储数字索引,然后是MySQL列字段索引,接着下一列······

print_r(mysqli_fetch_all($result,MYSQLI_BOTH));

//Array ( [0] => Array ( [0] => 1 [id] => 1 [1] => Yz [name] => Yz [2] => 1526 [class] => 1526 [3] => 25 [age] => 25 ) [1] => Array ( [0] => 2 [id] => 2 [1] => Zs [name] => Zs [2] => 1506 [class] => 1506 [3] => 20 [age] => 20 ) [2] => Array ( [0] => 3 [id] => 3 [1] => Ys [name] => Ys [2] => 1515 [class] => 1515 [3] => 22 [age] => 22 ) )

mysqli_fetch_filed()

返回集合中的下一个字段信息

object mysqli_fetch_filed(mysqli_result $result);

$str = 'select id num,name byte,class grade,age egg from p3 php3';

$result = mysqli_query($link,$str);

print_r(mysqli_fetch_field($result));

//stdClass Object ( [name] => num [orgname] => id [table] => php3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 1 [length] => 11 [charsetnr] => 63 [flags] => 49667 [type] => 3 [decimals] => 0 )

返回值:

name —— 列的别名,查询时声明的

orgname —— 原始列名

table —— 表的别名,查询时声明的

orgtable ——原始表名

def —— 保留默认值,当前始终为“”

db —— 数据库的名称

catlog —— 目录名,总是“def”(因为PHP 5.3.6)

max_length —— 结果集的字段的最大宽度。

length —— 在表定义中指定的字段宽度。

charsetnr —— 字段的字符集编号。

flags —— 表示该字段的位标志的整数。

type —— 用于此字段的数据类型

decimals —— 使用的小数位数(用于整数字段)

获取对象集合中的数据:

每次返回一列字段信息

$object = mysqli_fetch_field($result);

echo $object->name;//num

echo $object->orgtable;//p3

mysqli_fetch_fileds()

返回表中所有字段的对象数组,组成一个结果集合

array mysqli_fetch_fileds(mysqli_result $result);

print_r(mysqli_fetch_fields($result));

// Array ( [0] => stdClass Object ( [name] => num [orgname] => id [table] => p3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 1 [length] => 11 [charsetnr] => 63 [flags] => 49667 [type] => 3 [decimals] => 0 )

// [1] => stdClass Object ( [name] => byte [orgname] => name [table] => p3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 2 [length] => 30 [charsetnr] => 33 [flags] => 0 [type] => 253 [decimals] => 0 )

// [2] => stdClass Object ( [name] => grade [orgname] => class [table] => p3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 4 [length] => 4 [charsetnr] => 63 [flags] => 32768 [type] => 3 [decimals] => 0 )

// [3] => stdClass Object ( [name] => egg [orgname] => age [table] => p3 [orgtable] => p3 [def] => [db] => php1 [catalog] => def [max_length] => 2 [length] => 3 [charsetnr] => 63 [flags] => 32768 [type] => 3 [decimals] => 0 ) )

获取数据(先以数组方式获取对象集合,然后利用对象获取数据):

$object =mysqli_fetch_fields($result);

for($i=0;$i<=3;$i++){

echo $object[$i]->orgname.',';

//id,name,class,age,

}

mysqli_num_rows()

获取结果中行的数量

int mysqli_num_rows(mysqli_result $result);

echo(mysqli_num_rows($result));//3

使用mysqli_query()设置参数MYSQLI_USE_RESULT模式必须在获取完结果集才可以使用此函数

$str = 'select id num,name byte,class grade,age egg from p3';

$result = mysqli_query($link,$str,MYSQLI_USE_RESULT);

print_r(mysqli_fetch_assoc($result));//第一行

echo(mysqli_num_rows($result));//报错

print_r(mysqli_fetch_assoc($result));//第二行

echo(mysqli_num_rows($result));//报错

print_r(mysqli_fetch_assoc($result));//第三行

echo(mysqli_num_rows($result));//报错

print_r(mysqli_fetch_assoc($result));

echo(mysqli_num_rows($result));//3

释放对象集合

返回的结果集合在数据量较大的时候需要很多的内存支持,所以需要在操作完结果集合之后释放其所占的内存,释放之后,结果集不可以

void mysqli_free_result(mysqli_result $result);

例如:

mysqli_free_result($result);

echo(@mysqli_num_rows($result));//会报错

其他常用函数

mysqli_affected_rows()

获取上一个MySQL操作中受影响的行数

mysqli_affected_rows ( mysqli $link ) : int

例如:

//改变了第二行数据,影响了第一行

$str = 'update p3 set name = "zhao" where id = 2;';

if(mysqli_query($link,$str))

{

echo mysqli_affected_rows($link);//1

}

mysqli_insert_id()

获取从之前的insert操作生成的ID

mysqli_stmt_insert_id ( mysqli $link ) : mixed

$str = 'insert p3 values (10,"ws",1506,20);';

if(mysqli_query($link,$str))

{

echo mysqli_insert_id($link);//10

}

mysqli_real__string

转义用于SQL语句中的特殊字符,防止SQL语句出错

mysqli_real_escape_string ( mysqli $link , string $escapestr ) : string

$escapest —— 需要转义的字符串

返回值 : 转义后的字符串。

也可以使用

addslashes(string $escapestr) : string

$s = <<

"dwdw"wdw"wdwd;"dw'q'd"d'w@dW"wdwq"

end;

$s = mysqli_real_escape_string($link,$s);

// $s = addslashes($s);

// echo $s;

$str = "alter table p3 modify column name varchar(255);";

mysqli_query($link,$str);

$str = "insert into p3 (name,class,age) values ('{$s}',1506,20)";//刚开始设置的长度太小

if(mysqli_query($link,$str))

{

echo $s;//\"dwdw\"wdw\"wdwd;\"dw\'q\'d\"d\'w@dW\"wdwq\"

}

else{

//没有转义,会报错

echo mysqli_errno($link).":".mysqli_error($link);

//1064:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '},1506,20)' at line 1

}

预处理语言机制

针对重复执行相似语句的情况,可以将整个语句只向MySQL服务器发送一次,以后只改变参数,这样减少了需要传输的数据量,还提高了语句的处理效率

//连接数据库,并创建一个表

//连接数据库

$link = mysqli_connect('localhost','root','888888','php1',3306);

if(mysqli_connect_errno($link)){

echo mysqli_connect_error();

}

else{

echo '连接成功';

}

mysqli_set_charset($link,'utf8');

$query = "create table p4 (id int auto_increment primary key ,name varchar(25),class int)";

if(mysqli_query($link,$query)){

echo "表创建成功";

}

else{

echo mysqli_errno($link).":".mysqli_error($link);

}

mysqli_prepare()

准备执行一个 SQL 语句

准备SQL语句,存在占位符 ?,来代表各种需要修改的数据

mysqli_prepare( mysqli $link,string $query) : mysqli_stmt

mysqli_prepare() 返回一个 statement 对象,如果发生错误则返回 false。

$query = " insert into p4 (name , class) values (?,?) ";

$stmt = mysqli_prepare($link,$query);

print_r($stmt);

//mysqli_stmt Object ( [affected_rows] => 0 [insert_id] => 0 [num_rows] => 0 [param_count] => 2 [field_count] => 0 [errno] => 0 [error] => [error_list] => Array ( ) [sqlstate] => 00000 [id] => 1 )

报错类型

mysqli_stmt_errno ( mysqli_stmt $stmt ) : int

mysqli_stmt_error ( mysqli_stmt $stmt ) : string

mysqli_stmt_bind_param ()

将变量绑定到准备好的语句作为参数

即 stmt类型 的 ? 绑定变量

mysqli_stmt_bind_param ( mysqli_stmt $stmt , string $types , mixed &$var1 [mixed &$... ] ) : bool

$stmt —— 一个 statement 对象

$type 取值:

Character

Description

i

对应的变量具有整数类型

d

对应的变量具有小数类型

s

对应的变量具有字符串类型

b

对应的变量是blob,将以数据包形式发送

&$var1 —— 与前边type对应,同时匹配 ? 所对应的参量

返回值:成功时返回 true, 或者在失败时返回 false。

var_dump(mysqli_stmt_bind_param($stmt,'si',$val_1,$val_2));//true

$val_1 = "小明";

$val_2 = 31122110;

mysqli_stmt_execute()

执行准备好的 SQL语句

mysqli_stmt_execute ( mysqli_stmt $stmt ) : bool

返回值:成功时返回true ,否则false

var_dump(mysqli_stmt_execute($stmt));//true

多次执行,只需要赋值,并使用mysqli_stmt_execute()执行语句

$val_1 = "小双";

$val_2 = 31200000;

var_dump(mysqli_stmt_execute($stmt));//true

传参例子

//准备执行一条SQL语句

$query = " insert into p4 (name , class) values (?,?) ";

$stmt = mysqli_prepare($link,$query);

// 给? 绑定变量

var_dump(mysqli_stmt_bind_param($stmt,'si',$val_1,$val_2));

//变量赋值

$val_1 = "小明";

$val_2 = 31122110;

//执行准备好的SQL语句

var_dump(mysqli_stmt_execute($stmt));

//继续执行SQL语句

$val_1 = "小双";

$val_2 = 31200000;

var_dump(mysqli_stmt_execute($stmt));

mysqli_stmt_bind_result()

将查询出的数据绑定到PHP变量

将变量绑定到准备好的语句以存储结果

mysqli_stmt_bind_result( mysqli_stmt $stmt , mixed &$var1 [mixed &$... ] ) : bool

返回值:成功时返回true ,否则false

mysqli_stmt_bind_result($stmt,$id,$name,$class);

//要查询的字段都要加列出来

mysqli_stmt_fetch()

从一个prepare 语句中抓取结果到指定变量中

mysqli_stmt_fetch( mysqli_stmt $stmt ) : bool

返回值:成功时返回true ,否则false

mysqli_stmt_fetch($stmt);

查询例子

//准备一条SQL语句

$query = "select * from p4 where id = ?";

$stmt = mysqli_prepare($link,$query);

//绑定变量

var_dump(mysqli_stmt_bind_param($stmt,"s",$val));

//执行准备好的SQL语句

$val = 3;

var_dump(mysqli_stmt_execute($stmt));

//将查询出的数据绑定到PHP变量

mysqli_stmt_bind_result($stmt,$id,$name,$class);

//从一个prepare 语句中抓取结果到指定变量中

mysqli_stmt_fetch($stmt);

//引用变量获取结果

echo $id."-".$name."-".$class;

//结果:1-小明-31122110

改进方案:

查询到多条结果,进行输出

$query = "select * from p4 where id < ?";

$stmt = mysqli_prepare($link,$query);

var_dump(mysqli_stmt_bind_param($stmt,"s",$val));

$val = 3;

if(mysqli_stmt_execute($stmt)){

mysqli_stmt_bind_result($stmt,$id,$name,$class);

while(mysqli_stmt_fetch($stmt))

{

echo "
".$id."-".$name."-".$class;

}

}

//结果:

//1-小明-31122110

//2-小明-31122110

$val = 5;

if(mysqli_stmt_execute($stmt)){

mysqli_stmt_bind_result($stmt,$id,$name,$class);

while(mysqli_stmt_fetch($stmt))

{

echo "
".$id."-".$name."-".$class;

}

}

//结果:

//1-小明-31122110

//2-小明-31122110

//3-小明-31122110

//4-小双-31200000

mysqli_stmt_result_metadata()

返回结果集合,配合相关函数,来可以获取字段的相关信息

mysqli_stmt_result_metadata(mysqli_stmt $stmt) : mysqli_result

返回值为集合对象,

配合使用的函数:

mysqli_num_fields()

mysqli_fetch_field()

mysqli_fetch_field_direct()

mysqli_fetch_fields()

mysqli_field_count()

mysqli_field_seek()

mysqli_field_tell()

mysqli_free_result()

$query = "select * from p4 where id < ?";

$stmt = mysqli_prepare($link,$query);

var_dump(mysqli_stmt_bind_param($stmt,"s",$val));

$val = 3;

if(mysqli_stmt_execute($stmt)){

$result = mysqli_stmt_result_metadata($stmt);

print_r(mysqli_fetch_fields($result));

//Array ( [0] => stdClass Object ( [name] => id [orgname] => id [table] => p4 [orgtable] => p4 [def] => [db] => php1 [catalog] => def [max_length] => 0 [length] => 11 [charsetnr] => 63 [flags] => 49667 [type] => 3 [decimals] => 0 )

// [1] => stdClass Object ( [name] => name [orgname] => name [table] => p4 [orgtable] => p4 [def] => [db] => php1 [catalog] => def [max_length] => 0 [length] => 75 [charsetnr] => 33 [flags] => 0 [type] => 253 [decimals] => 0 )

// [2] => stdClass Object ( [name] => class [orgname] => class [table] => p4 [orgtable] => p4 [def] => [db] => php1 [catalog] => def [max_length] => 0 [length] => 11 [charsetnr] => 63 [flags] => 32768 [type] => 3 [decimals] => 0 ) )

}

mysqli_stmt_store_result()

从准备好的语句传输结果集

mysqli_stmt_store_result ( mysqli_stmt $stmt ) : bool

$stmt —— 仅以过程化样式:由 mysqli_stmt_init() 返回的 statement 标识。

返回值:成功时返回true ,否则false

mysqli_stmt_num_rows()

返回语句结果集合的行数

mysqli_stmt_num_rows(mysqli_stmt $stmt ) : int

//查询有几条数据,需要mysqli_stmt_store_result($stmt)和mysqli_stmt_num_rows($stmt)配合使用

$query = "select * from p4 where id < ?";

$stmt = mysqli_prepare($link,$query);

var_dump(mysqli_stmt_bind_param($stmt,"s",$val));

$val = 3;

if(mysqli_stmt_execute($stmt)){

echo mysqli_stmt_store_result($stmt);//1

echo mysqli_stmt_num_rows($stmt);//2

}

mysqli_stmt_free_result()

释放给定语句处理存储的结果集合所占内存

mysqli_stmt_free_result ( mysqli_stmt $stmt ) : void

没有返回值

释放与该语句关联的结果内存,该内存由mysqli_stmt_store_result()分配。

mysqli_stmt_close()

关闭一个prepared语句,即关闭准备好的语句

mysqli_stmt_close ( mysqli_stmt $stmt ) : bool

返回值:成功时返回true ,否则false

var_dump(mysqli_stmt_close ($stmt ));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值