PHP调用MySQL存储过程并返回值实现程序
。调用存储过程的方法。
a。如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,一个php变量(也可以不必,只是没有php变量时,没有办法进行动态输入),一个Mysql变量。
b。如果存储过程有OUT变量,声明一个Mysql变量。mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句。入set @mysqlvar=$phpvar ;
c。使用mysql_query()/mysql_db_query()执行mysql 变量声明语句。
代码如下 | 复制代码 |
mysql_query("set @mysqlvar【=$pbpvar】"); |
这样,在mysql服务器里面就有一个变量,@mysqlar。如果时IN参数,那么其值可以有phpar传入
例
利用mysqli函数实例
我们先可在mysql创建一个存储过程
代码如下 | 复制代码 |
mysql> delimiter // |
然后在php中如下写
代码如下 | 复制代码 |
<h1>Employee listing</h1> <?php if (IsSet ($_POST['submit'])) { $dbh = new mysqli($hostname, $username, $password, $database); /* check connection */ if ($result_set = $dbh->query("call employee_list( $dept_id )")) { |
核心代码就是
代码如下 | 复制代码 |
$result_set = $dbh->query("call employee_list( $dept_id )") |
这句了employee_list是我们的mysql存储过程了
Phpmyadmin是现在大多数php mysql开发者使用的一款WEB数据库管理工具了,Phpmyadmin安装配置方法也是非常的简单,下面我来给大家介绍Phpmyadmin安装配置方法图解,有需要了解的朋友可参考。分析
找到 /libraries/config.default.php文件(旧版本是根目录下的config.inc.php文件),用写字板(不要用记事本,这是UTF8编码)进行编辑。
4、查找 $cfg['PmaAbsoluteUri']
修改为你将上传到空间的phpMyAdmin的网址
如:$cfg['PmaAbsoluteUri'] = ‘http://www.xxx.com/phpmyadmin/’;
5、查找 $cfg['Servers'][$i]['host'] = ‘localhost’;(通常用默认,也有例外,可以不用修改)
6、查找 $cfg['Servers'][$i]['auth_type'] = ‘config’;
在自己的机子里调试用config;如果在网络上的空间用cookie,这里我们既然在前面已经添加了网址,就修改成cookie ,这里建议使用cookie.
7、查找 $cfg['Servers'][$i]['user'] = ‘root’; // MySQL user( 用户名,一般这里随便填几个字母就可以了; 特殊情况下,自己机里用root,在网上一般为你的ftp用户名,虚拟主机提供商会告诉你的,一般不要修改.)
8、查找 $cfg['Servers'][$i]['password'] = ”; // MySQL password (only needed 留空就可以了)
9、查找 $cfg['Servers'][$i]['only_db'] = ”; // If set to a db-name, only(你只有一个数据就设置一下,设置为你的数据库名;如果你想架设服务器,那么建议留空)
10、查找 $cfg['DefaultLang'] = ‘zh’; (这里是选择语言,zh代表简体中文的意思)
11、查找$cfg['blowfish_secret'],请在$cfg['blowfish_secret'] = ‘ ‘;的等号里面设置你网站的cookie(cookie也就是访问phpmyadmin的域名),例如:$cfg['blowfish_secret'] = ‘www.xinnethz.net’;。
phpmyadmin的链接表的额外特性尚未激活问题如何解决?
回到上图我们看到尽管phpmyadmin配置完成可以使用了,但是底部仍然提示有部分配置工作没有完成,其中一条提示:链接表的额外特性尚未激活,那么如何解决呢?
首先,点击导入链接,上传scripts/create_tables.sql并执行,创建phpmyadmin数据库。
其次,在phpmyadmin配置文件config.default.php中找到
代码如下 | 复制代码 |
<? $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark'; $cfg['Servers'][$i]['relation'] = 'pma_relation'; $cfg['Servers'][$i]['table_info'] = 'pma_table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma_column_info'; $cfg['Servers'][$i]['history'] = 'pma_history'; $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords'; $cfg['Servers'][$i]['tracking'] = 'pma_tracking'; |
在phpmyadmin配置文件中默认这些变量都是空的,你只需要根据注释对变量进行赋值即可。
完成上述配置操作后,关闭游览器,重新登录即可。
phpmyadmin配置文件现在需要一个短语密码如何解决?
在phpmyadmin配置文件config.default.php中找到
代码如下 | 复制代码 |
<? |
此处我赋值为leapsoul.cn,这个密码用于Cookies的加密
phpmyadmin登录方式说明
在phpmyadmin3中,总共有四种登录方式
config:直接输入phpmyadmin远程登录地址即可,只要在配置文件中设置用户名密码即可。
http:弹出对话框,输入用户名和密码后进入
signon:类似于页面跳转的登录方式,同时需要设定$cfg['Servers'][$i]['SignonURL'],当你输入phpmyadmin的远程登录地址后会自动跳转到signonURL设定的网址。
cookie:也就是phpmyadmin配置时候的登录方式。
至此整个phpmyadmin3的安装和配置工作就算完成了,你可以体验phpmyadmin新版本的新功能了
在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍mysql_connect与mysql_pconnect的区别,有需要了解的朋友可参考。PHP mysql_pconnect
mysql_pconnect() 函数打开一个到 MySQL 服务器的持久连接。
mysql_pconnect() 和 mysql_connect() 非常相似,但有两个主要区别:
1.当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
2.其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)。
语法
mysql_pconnect(server,user,pwd,clientflag)参数 描述
server 可选。规定要连接的服务器。
可以包括端口号,例如 "hostname:port",或者到本地套接字的路径,例如对于 localhost 的 ":/path/to/socket"。
如果 PHP 指令 mysql.default_host 未定义(默认情况),则默认值是 'localhost:3306'。
user 可选。用户名。默认值是服务器进程所有者的用户名。
pwd 可选。密码。默认值是空密码。
clientflag 可选。client_flags 参数可以是以下常量的组合:
•MYSQL_CLIENT_SSL - 使用 SSL 加密
•MYSQL_CLIENT_COMPRESS - 使用压缩协议
•MYSQL_CLIENT_IGNORE_SPACE - 允许函数名后的间隔
•MYSQL_CLIENT_INTERACTIVE - 允许关闭连接之前的交互超时非活动时间
返回值
如果成功,则返回一个 MySQL 持久连接标识符,出错则返回 FALSE。
提示和注释
注释:可选参数 clientflag 自 PHP 4.3.0 版起可用。
提示:要创建一个非持久连接,请使用 mysql_connect() 函数。
例子
代码如下 | 复制代码 |
<?php $con = mysql_pconnect("localhost","mysql_user","mysql_pwd"); if (!$con) { die('Could not connect: ' . mysql_error()); } ?> |
PHP mysql_connect
mysql_connect() 函数打开非持久的 MySQL 连接。
语法
mysql_connect(server,user,pwd,newlink,clientflag)参数 描述
server 可选。规定要连接的服务器。
可以包括端口号,例如 "hostname:port",或者到本地套接字的路径,例如对于 localhost 的 ":/path/to/socket"。
如果 PHP 指令 mysql.default_host 未定义(默认情况),则默认值是 'localhost:3306'。
user 可选。用户名。默认值是服务器进程所有者的用户名。
pwd 可选。密码。默认值是空密码。
newlink 可选。如果用同样的参数第二次调用 mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识。参数 new_link 改变此行为并使 mysql_connect() 总是打开新的连接,甚至当 mysql_connect() 曾在前面被用同样的参数调用过。
clientflag 可选。client_flags 参数可以是以下常量的组合:
•MYSQL_CLIENT_SSL - 使用 SSL 加密
•MYSQL_CLIENT_COMPRESS - 使用压缩协议
•MYSQL_CLIENT_IGNORE_SPACE - 允许函数名后的间隔
•MYSQL_CLIENT_INTERACTIVE - 允许关闭连接之前的交互超时非活动时间
返回值
如果成功,则返回一个 MySQL 连接标识,失败则返回 FALSE。
提示和注释
注释:脚本一结束,到服务器的连接就被关闭,除非之前已经明确调用 mysql_close() 关闭了。
提示:要创建一个持久连接,请使用 mysql_pconnect() 函数。
例子
代码如下 | 复制代码 |
<?php // 一些代码... mysql_close($con); |
mysql_connect与mysql_pconnect的区别
这俩函数用法上差不久不多,网上有说应当用pconnect的,pconnect是个 好器材;也有视pconnect如洪水猛兽的,果断不让用pconnect的,也有立场模糊不清的。那这个器材到底如何呢?
永远链接并不是说,办事器打开了一个连接,然后所有的人都共享这个链接。永远连接一样是每个客户端来就打开一个连接,有200人接见就有200个连接。其 实mysql_pconnect()本身并没有做太多的处理惩罚, 它独一做的只是在php运行停止后不主动close掉mysql的连接.
在php经cgi体式格式运行时pconnect和connect是根蒂根基没有区此外, 因为cgi体式格式是每一个php接见起一个过程, 接见停止掉队程也就停止了, 资料也全开释了. 当php以apache模块体式格式运行时, 因为apache有应用过程池, 一个httpd过程停止后会被放回过程池, 这也就使得用pconnect打开的的那个mysql连接资料不被开释, 于是有下一个连接恳求时就可以被复用.这就使得在apache并发接见量不大的时辰, 因为应用了pconnect, php节俭了反复连接db的时候, 使得接见速度加快. 这应当是斗劲好懂得的. 然则在apache并发接见量大的时辰, 若是应用pconnect, 会因为之前的一些httpd过程占用的mysql连接没有close, 则可能会因为mysql已经达到最大连接着, 使得之后的一些恳求永远得不到满足.若mysql最大连接数设为500, 而apache的最大同时接见数设为2000,假设所有接见都邑请求接见db, 并且操纵时候会斗劲长,当前500个恳求的httpd都没有停止的时辰,之后的httd过程都是无法连接到mysql的(因已经达到mysql最大连接 数). 只有当前500个httpd过程停止或被复用才可以连接获得了mysql.
当db操纵错杂, 耗时较长时, 因httpd会fork很多并发过程处理惩罚, 而先产生的httpd过程不开释db连接, 使得后产生的httpd过程无法连上db. 因为如许没有复用其它httpd过程的mysql连接. 于是会就产生很多连接超时。 在并发接见量不高时,应用pconnect可以简单进步接见速度, 但在并发量增大后, 是否再应用pconnect就要见地度员的选择了.
就我小我认为, php如今对mysql的连接并没有真正用到连接池, pconnect也只是相当于借了apache的过程池来用, 所以在并发接见量大的时辰pconnect并不克不及很好的进步接见db效力.
在实际的应用中,用mysql_pconnect的话,每次刷新和恳求新的页面都斗劲快,而用mysql_connect的话,每次刷新都要从头恳求,当数据库连接斗劲慢的时辰,就能看出差别了。当你的数据库连接斗劲慢,DB操纵不是很错杂,并且你的法度足够自负,不会产存亡锁的时辰,或者你拥有对办事器的把握权,满足以上四个前提中的随便率性两个,那就可以用pconnect。
pconnect不消在脚本里封闭,可以在mysql中设置lifetime,也可以写shell按期扫描,kill掉休眠过长的连接。 一句话总结:要用好pconnect,不仅仅是php脚本的事 还关系到数据库和办事器的设置。
下面只是一个简单的实例
我们先准备mysql数据表,假设项目中有一张记录学生信息的表student,并有id,name,sex,age分别记录学生的姓名、性别、年龄等信息。
代码如下 | 复制代码 |
CREATE TABLE `student` ( |
我们还需要一个html交互页面,放置导入表单和导出按钮。
代码如下 | 复制代码 |
<form id="addform" action="do.php?action=import" method="post" enctype="multipart/form-data"> |
选择好本地csv文件后,点击导入,提交到do.php?action=import处理,而点击导出按钮则请求地址do.php?action=export进行数据导出处理。
1.导入CSV
do.php需要根据get过来的参数,分别处理导入和导出过程,php结构如下:
include_once ("connect.php"); //连接数据库
代码如下 | 复制代码 |
$action = $_GET['action']; if ($action == 'import') { //导入CSV //导入处理 } elseif ($action=='export') { //导出CSV //导出处理 } |
导入CSV处理流程:校验csv文件合法性(本文忽略)->打开读入并解析csv文件中的字段->循环获取各字段值->批量添加到数据表中->完成。
代码如下 | 复制代码 |
if ($action == 'import') { //导入CSV |
注意php自带的fgetcsv函数可以轻松处理csv,使用该函数可以从文件指针中读入一行并解析CSV字段。下面的函数将csv文件字段解析并以数组的形式返回。
代码如下 | 复制代码 |
function input_csv($handle) { |
此外在导入到数据库中时,我们采用的是批量插入而不是一条条插入的,因此在构建SQL语句时,要稍作处理,见代码。
2.导出CSV
我们知道csv文件是由逗号分割符组成的纯文本文件,你可以用excel打开,效果跟xls表个一样。
导出CSV处理流程:读取学生信息表->循环记录构建逗号分隔的字段信息->设置header信息->导出文件(下载)到本地
代码如下 | 复制代码 |
... |
要将数据导出到本地即下在,需要修改header信息,代码如下:
代码如下 | 复制代码 |
function export_csv($filename,$data) { |
注意导入和导出的过程中,因为我们使用的是统一UTF-8编码,遇到中文字符一定要记得转码,否则可能会出现中文乱码的情况。
PHP把导入和导出CSV文件下载:http://file.111cn.net/download/2013/05/15/importCSV.rar
使用文本数据库一般是针对小型的应用程序了,这种不就需要安装数据库了,我们可以直接操作文本文件就可以了,但时怎么操作都不如mysql数据库好用了,下面我来给大家介绍一个文本数据库转为mysql数据库实例。
代码如下 | 复制代码 |
<?php require_once 'config.php'; $action = empty($_GET['action']) ? '' : $_GET['action']; $id = isset($_GET['id']) ? $_GET['id'] : 0; if (empty($action)) {//列表 $result = "SELECT * FROM posts ORDER BY pid DESC"; $items = 3; $page = isset($_GET['page']) ? intval($_GET['page']) : 1; $page = ($page =='' && $page < 0) ? 1 : $page; $total = mysql_num_rows(mysql_query($result));//数据条目总数 $pageall = ceil($total/$items); $offset = ($page-1)*$items;//数据开始位置 $result .= " limit {$offset},{$items}";//每页显示 $results = mysql_query($result); $prev = $page - 1; $next = $page + 1; $goPrev = "<a href="?page=$prev">上一页</a>"; $goNext = "<a href="?page=$next">下一页</a>"; if ($page == $pageall){ $goNext = NULL;} $pagestate = ''; if ($page == 1 && $pageall > 1) { $pagestate .= $goNext; } elseif ($pageall > $page || $page >1) { $pagestate .= $goNext . '|' .$goPrev; } elseif ($page >1 ) { $pagestate .= $goPrev; } else { $pagestate .= 'Just One Page'; } $pagelinks = ''; for ($i = 1; $i <= $pageall; $i++) { $pagelinks .= ($i != $page) ? "<a href="?page=$i">$i</a>" : $i; $pagelinks .= ($i < $pageall) ? '-' : null; } // end 分页 $data = array(); //列出文章 while ($row = mysql_fetch_array($results)) {//mysql_fetch_array ; 从查询结果取出一行作为数组; $data[] = $row;// } //列出分类 $recat = mysql_query("SELECT * FROM category ORDER BY cid DESC"); $cdata = array(); while ($catlist = mysql_fetch_array($recat)) { $cdata[$catlist['cid']] = $catlist; } include template('index'); } elseif ($action == 'post') {//发表 $title = $_POST['title']; $date = date("Y-m-d H:i:s"); $content = $_POST['content']; $cid = $_POST['cat']; if ($title == '' || $content == '' || $cid == '') { echo "缺少必填项nnnn<a href="javascript:history.go(-1);">返回</a>"; } else { $insertPost = "INSERT INTO posts (title,time,post,cid) VALUES ('$title','$date','$content','$cid')"; if (!mysql_query($insertPost,$sql)) { die('ERROR: '. mysql_error()); } header('location: index.php'); } } elseif ($action == 'view') {//查看 $view = mysql_query("SELECT * FROM posts WHERE pid='$id'"); while ($row = mysql_fetch_array($view)) { $title = $row['title']; $time = $row['time']; $post = $row['post']; } if ($_SERVER['REQUEST_METHOD'] == 'POST') {//评论 $name = isset($_POST['name']) ? $_POST['name'] : 0; $review = isset($_POST['review']) ? $_POST['review'] : 0; if ($name == '' && $review == '') { echo "缺少必填项"; exit; } $insertRview = "INSERT INTO review (pid,name,review) VALUES ('$id','$name','$review')"; if (!mysql_query($insertRview,$sql)) { die('ERROR: ' . mysql_error()); } header("location: ?action=view&id=$id"); } $rert = mysql_query("SELECT * FROM review WHERE pid='$id' ORDER BY rid ASC"); $data = array(); while ($relist = mysql_fetch_array($rert)){ $data[] = $relist; } include template('view'); } elseif ($action == 'del') {//删除 mysql_query("DELETE FROM posts WHERE pid='$id'"); header("location: index.php"); } elseif ($action == 'edit') {//编辑 if ($_SERVER['REQUEST_METHOD'] == 'POST') { $title = $_POST['title']; $content = $_POST['content']; $date = date("Y-m-d H:i:s"); if ($title == '' or $content == '') { echo "缺少必填项nnnn<a href="javascript:history.go(-1);">返回</a>"; exit;} mysql_query("UPDATE posts SET title='$title',time='$date',post='$content' WHERE pid='$id'"); header("location: index.php"); } else { $row = mysql_query("SELECT * FROM posts WHERE pid='$id'"); $row = mysql_fetch_array($row); include template('edit'); } } elseif ($action == 'newcat') {//新建分类 $cat = isset($_POST['category']) ? $_POST['category'] : 0; if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($cat == '') { echo "缺少必填项nnnn<a href="javascript:history.go(-1);">返回</a>"; exit;} $insertCat = "INSERT INTO category (category) VALUES ('$cat')"; if (!mysql_query($insertCat,$sql)){ die('ERROR: ' . mysql_error()); } header("location: index.php"); } include template('jioncat'); } elseif ($action == 'vcat') { $cid = $_GET['cid']; $revcats = "SELECT * FROM posts WHERE cid='$cid' ORDER BY cid DESC"; $items = 1; $page = isset($_GET['page']) ? intval($_GET['page']) : 1; $page = ($page =='' && $page < 0) ? 1 : $page; $total = mysql_num_rows(mysql_query($revcats));//数据条目总数 $pageall = ceil($total/$items); $offset = ($page-1)*$items;//数据开始位置 $revcats .= " limit {$offset},{$items}";//每页显示 $revcat = mysql_query($revcats); $prev = $page - 1; $next = $page + 1; $goPrev = "<a href="?action=vcat&cid=$cid&page=$prev">上一页</a>"; $goNext = "<a href="?action=vcat&cid=$cid&page=$next">下一页</a>"; if ($page == $pageall){ $goNext = NULL;} $pagestate = ''; if ($page == 1 && $pageall > 1) { $pagestate .= $goNext; } elseif ($pageall > $page || $page >1) { $pagestate .= $goNext . '|' .$goPrev; } elseif ($page >1 ) { $pagestate .= $goPrev; } else { $pagestate .= 'Just One Page'; } $pagelinks = ''; for ($i = 1; $i <= $pageall; $i++) { $pagelinks .= ($i != $page) ? "<a href="?action=vcat&cid=$cid&page=$i">$i</a>" : $i; $pagelinks .= ($i < $pageall) ? '-' : null; } $data = array(); while ($vclist = mysql_fetch_array($revcat)) { $data[] = $vclist; } include template('cplist'); } mysql_close($sql); |
题外话了,一个access转换成mysql数据库的实例
点击下载:http://file.111cn.net/download/2013/05/14/db2mysql.zip
相关文章
- Create Procedure AtoC @ChangeMoney Money as Set Nocount ON Declare @String1 char(20) Declare @String2 char(30) ...2016-11-25
- 存储过程在数据库的应用中我们用到的非常的多了,下面我们来看一篇关于PHP操作MSSQL存储过程修改用户密码的例子,具体的如下所示。 mssql2008 存储过程 下面可以直接...2016-11-25
- 具体详情请看下文小编给大家带来的知识点。同编写程序类似,存储过程中也有对应的条件判断,功能类似于if、switch。在MySql里面对应的是IF和CASE1、IF判断IF判断的格式是这样的:IF expression THEN commands [ELSEIF ex...2015-10-21
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
- 本文章来给大家详细介绍在php中如何来调用执行mysql存储过程然后返回由存储过程返回的值了,有需要了解的同学可进入参考。 。调用存储过程的方法。 a。如果存储过...2016-11-25
- 这篇文章主要介绍了Feign接口方法返回值设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-08
- 方法一:直接调用复制代码 代码如下:<? /******************************************************************************/ /* 文件名 : soapclient.php /* 说 明 : WebService接口客户端例程 /****************...2014-06-07
- 这篇文章主要介绍了C#调用存储过程的方法,结合实例形式详细分析了各种常用的存储过程调用方法,包括带返回值、参数输入输出等,需要的朋友可以参考下...2020-06-25
- 复制代码 代码如下:call PROCEDURE_split('分享,代码,片段',',');select * from splittable;复制代码 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varc...2014-05-31
- c#调用存储过程实现登录界面详解...2020-06-25
- 这篇文章主要介绍了Postman动态获取返回值过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-30
- PHP是现在很多程序比较常用的软件,一些人在写php代码时候,会遇到需要返回值的情况。这里可以统一设置下返回值格式,下面文章就给大家介绍返回值设置实例,下面一起来看看。...2017-07-06
- 这篇文章主要介绍了C#获取存储过程返回值的方法,大家参考使用吧...2020-06-25
- ACCESS是一个Client/Server的优秀前端开发工具,具有易学易用,界面友好,开发简单,和其他数据库接口灵活。但是,它要对大量数据处理时,速度比较慢。深圳供电局现有60万用户,下...2016-11-25
- 在php程序中有事会需要用到C代码,这篇文章着重介绍一下用C写php扩展的方法,而且不需要重新编译php。有需要的同学可以参考一下。 在php程序中需要用到C代码,应该是下...2017-07-06
- 这篇文章主要介绍了C#调用Oracle存储过程的方法,包含数据库及C#对应的调用代码,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- <HTML> <HEAD> <TITLE> php调用js文件的好办法</TITLE> </HEAD> <BODY> <scrīpt language=''javascrīpt'' type=''text/javascrīpt'' src=''test.php''>&...2016-11-25
- 下在我们来看一篇关于PHP7扩展开发之传参与返回值的例子,希望这一篇文章能够帮助到各位朋友,具体的细节如下文介绍. 前言 这次,我们将演示如何在PHP扩展中接受传入的...2016-11-25
- 这篇文章主要介绍了详解C语言函数返回值解析的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了oracle 存储过程、函数和触发器用法,结合实例形式详细分析了oralce 存储过程、函数和触发器具体功能、原理、定义、使用方法及相关操作注意事项,需要的朋友可以参考下...2020-07-11