《MySQL高级应用技术技术 .docx》由会员分享,可在线阅读,更多相关《MySQL高级应用技术技术 .docx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品名师归纳总结9.1 PHP的 mysqli扩展在 PHP5.0以后的版本中,不仅可以使用早期的MySQL数据库操纵函数,而且仍可以使用 mysqli扩展技术实现与 MySQL数据库的信息沟通。利用 mysqli 扩展技术不仅可以调用MySQL的储备过程、 处理 MySQL事务,而且仍可以使拜望数据库工作变得更加稳固。实例254通过 mysqli扩展技术实现数据库信息的检索实例说明在实际 Web工程开发过程中,经常需要对大量信息进行检索,为了营造一种稳固快速的查询环境,本实例将介绍如何利用mysqli 扩展技术实现商品信息的检索。运行本实例,如图 9.1 所示,在图中文本框中输入要查找的商品
2、名称,单击“查找”按钮, 假如该商品存在, 就显示该商品的全部信息, 否就提示没有查找到该商品。图 9.1商品信息检索技术要点本实例的关键技术是如何利用 mysqli 技术连接 MySQL数据库,并实现数据库信息的检索。 mysqli 技术可以使用面对对象和面对过程两种编程思想,本实例将接受当今较为流行的面对对象的编程方式。接受面对对象的编程方式连接 MySQL数据库,将通过 PHP的预定义类 mysqli实现,该类构造函数说明如下。mysqli 类的构造函数一般由以下 4 个参数构成。hostname:MySQL服务器的的址或主机名。 username:MySQL服务器中某用户的用户名。 u
3、serpwd:MySQL服务器中某用户对应的用户密码。可编辑资料 - - - 欢迎下载精品名师归纳总结databasename: MySQL服务器中某数据库的名称,该参数可省,假如省略了该参数,就需要利用 mysqli的成员函数 select_db指定数据库名称。所以 mysqli预定义类的实例化形式如下:new mysqlistring hostname, string username, string userpwd ,string databasename 。实现过程(1) 建立如图 9.1 所示的页面, 并建立 conn.php 文件实现与数据库的连接。代码如下:queryset na
4、mes gb2312。.(2) 判定提交按钮的值是否为空,假如不为空就开头执行查询。假如查询到用户要查询的商品, 就显示商品的信息, 否就提示没有查到该商品。 该过程代码如下:queryselect * from tb_goods where namelike %.$name.%。$info=$sql-fetch_arrayMYSQLI_ASSOC。if$info=NULLecho 没有查找到该商品 .。else.  。可编辑资料 - - - 欢迎下载精品名师归纳总结商品名称 商品价格商品数量进货日期 fetch_arrayMYSQLI_ASSOC。.举一反三依据本实例,读者可以:利用
5、 mysqli 扩展技术,实现指定进货时间段内的商品信息检索。利用 mysqli 扩展技术,实现论坛中注册用户信息的模糊查找。可编辑资料 - - - 欢迎下载精品名师归纳总结实例255查看服务器连接错误报告实例说明作为 PHP的黄金搭档 MySQL数据库,在 PHP工程开发过程中有着举足轻重的作用,这不仅由于 MySQL是完全免费的, 而且和 PHP一样都是完全跨平台的。 但在实际工程开发过程中, PHP与 MySQL数据库产生连接错误是不行防止的,本实例将讲解如何实现尽可能早的发觉这种连接错误。运行本实例,分别如图9.2及图 9.3 所示,图中错误的缘由都是当连接数据库服务器时, 用户密码输
6、入错误所致。图 9.2显示错误内容图 9.3显示错误号技术要点在 mysqli 扩展技术中,可以使用两种方式获得错误报告,第一种是直接猎取错误的缘由,其次种是猎取连接错误所代表的错误号。直接猎取错误的名称可以使用函数mysqli_connect_error,该函数的说明如下:string mysqli_connect_errormysqli link可编辑资料 - - - 欢迎下载精品名师归纳总结mysqli_connect_error函数将返回一个错误消息, 该消息对应利用 mysqli扩展技术连接 MySQL数据库时所产生的错误。猎取连接 MySQL数据库时产生的错误号可以使用函数mysq
7、li_connect_errno,该函数说明如下:int mysqli_connect_errno假如在连接 MySQL数据库服务器时显现了错误,就会产生一个该错误对应的消息数字, 利用该函数就可以猎取该数字。 下面为连接 MySQL数据库时可能发生错误的错误号及错误内容:1045:Access denied for user 用户名 用户密码 user password: YES上述错误代表用户密码输入错误。2005:Unknown MySQL server hostMySQL数据库服务器名 11004上述错误代表 MySQL数据库服务器名输入错误2021:Loset connection
8、to MySQL server during query上述错误代表在执行查询时失去与MySQL数据库的连接。可编辑资料 - - - 欢迎下载精品名师归纳总结实现过程(1) 建立 index.php文件,用于建立 PHP与 MySQL数据库的连接,并输入错误的用户密码。代码如下:(2) 建立 index_1.php文件,用于建立 PHP与 MySQL数据库的连接,并输入错误的用户密码。代码如下:(3) 分别执行 index.php文件和 index_1.php文件查看结果。举一反三依据本实例,读者可以:输出 MySQL数据库服务器名输入错误时的错误号。输出 MySQL数据库服务器名输入错误时的
9、错误名称。实例256通过 mysqli扩展技术实现多表查询实例说明在实际的工程开发过程中,一个工程经常需要多个数据表来储备信息,并且这些表之间通过主键彼此相互联系。 本实例将讲解如何实现多表之间的查询。 运行本实例, 如图 9.4 所示,图中的“学号”和“姓名”字段来自tb_student表, 而其他字段来自 tb_score表。可编辑资料 - - - 欢迎下载精品名师归纳总结图 9.4显示查询的结果技术要点利用 mysqli技术实现多表查询,关键是如何实现多表之间通过主键进行连接。下面是本实例实现多表查询的代码:$sql=$conn-queryselect * from tb_student
10、,tb_score where tb_student.id=tb_score.sid。实现多表之间的查询应在from 关键字后列出全部的表名,并且表名之间用逗号进行分割。 同时应在 where 关键字中指明多表之间的连接条件, 例如本例中的 tb_student.id=tb_score.sid,说明同学表和成果表之间通过同学表的id 字段和成果表的 sid 字段进行连接。可编辑资料 - - - 欢迎下载精品名师归纳总结实现过程(1) 建立 conn.php 文件,实现与 MySQL数据库之间的连接。代码如下:queryset names gb2312。.(2) 建立 index.php文件,用
11、于实现多表之间的查询,假犹如学表和成果表中有中意条件的记录,就显示这些记录,否就提示没有相关信息。代码如下:queryselect * from tb_student,tb_score where tb_student.id=tb_score.sid。$info=$sql-fetch_arrayMYSQLI_ASSOC。if$info=NULLecho 暂无同学信息 。elsedo.fetch_arrayMYSQLI_ASSOC。.举一反三依据本实例,读者可以:实现检索多表信息同时分页显示。可编辑资料 - - - 欢迎下载精品名师归纳总结实现检索多表信息同时降序输出。实例257通过 mysql
12、i扩展技术实现内存的回收实例说明为了有效利用服务器的内存空间,在猎取较大结果集时,一旦终止操作,就 有必要回收集合所需要的内存,由于mysqli 技术可以接受面对对象和面对过程两种编程方式, 所以与之对应的内存回收方式就有两种, 将通过本实例讲解内存回收机制在工程开发过程中的价值和使用方法。运行本实例, 如图 9.5 所示,图中为某班级 3 门主科成果,并在显示完该班成果后,对内存进行了回收。图 9.5显示查询结果技术要点PHP为了迎合不同开发习惯的程序员, 在 mysqli 扩展技术中供应了面对对象和面对过程两种编程方式, 所以实现内存回收也存在与之对应的两种方式。假如接受面对过程的编程方式
13、可以通过如下函数实现内存回收:bool mysqli_close object linklink指 mysqli_connect函数返回的数据库连接句柄。假如接受面对对象的编程方式,可以通过如下语句实现:link-closelink指 PHP预定义的 mysqli 类实例化后的对象。实现过程(1) 建立 conn.php 文件,实现与 MySQL数据库之间的连接。代码如下:queryset names gb2312。.(2) 通过 dowhile循环显示该班级全部同学的成果。代码如下:queryselect * from tb_student,tb_score where tb_student
14、.id=tb_score.sid。$info=$sql-fetch_arrayMYSQLI_ASSOC。if$info=NULLecho 暂无同学信息 。elsedo.fetch_arrayMYSQLI_ASSOC。(3) 实现内存的回收。代码如下:$sql-close。$conn-close。举一反三依据本实例,读者可以:在图书治理系统中,查询完图书信息后实现内存回收。在谈天室中,用户每发一次信息实现一次内存回收。可编辑资料 - - - 欢迎下载精品名师归纳总结9.2 MySQL视图的应用视图也称虚表,包括执行某个查询返回的一组记录。视图可以简化猎取数据的方法,并通过别名来实现抽象查询。可编
15、辑资料 - - - 欢迎下载精品名师归纳总结实例258创建视图实例说明为了简化查询,在实际工程开发过程中,通常可以接受为数据库中的某个表建立视图的方式。 在建立的视图中只有开发人员所关怀的字段。运行本实例, 如图 9.6 所示,分别在图中输入登录用户的用户名和密码,单击“进入”按钮后, 假如用户输入错误的用户名或密码, 就给出错误提示, 反之假如输入的用户名和密码正确,就提示成功登录。由于本实例接受视图建立了虚表, 所以应第一在“命令提示符”下建立视图,如图 9.7 所示。图 9.7创建视图技术要点MySQL中创建视图可以通过 create view语句来实现,详细创建格式如下:create
16、or deplace algorithm=merge | temptable | undefined view view_name column_list as select_statement with cascaded | local check optionalgorithm=merge | temptable | undefined属性用于优化 MySQL视图的执行,该属性有 3 个可用的设置。下面将介绍这 3 个设置的使用方法。可编辑资料 - - - 欢迎下载精品名师归纳总结merge:该参数使 MySQL执行视图时传入的任何子句合并到视图的查询定义中。temptable :假如视图
17、低层表中的数据有变化,这些变化将在下次通过表时马上反映出来。undefined :当查询结果和视图结果为一一对应关系时,MySQL将 algorithm设定为 temptable 。view_name:新建视图的名称。select_statement:SQL查询语句用于限定虚表的内容。实现过程(1) 建立数据库及数据表,本实例中将数据表命名为tb_admin 。(2) 建立完数据表后,就可以在命令提示符下建立视图。创建视图的代码如下:create view chkadmin as select name, pwd from tb_admin创建完视图 chkadmin 后,该视图中只含有 na
18、me和 pwd两个字段,这样会给密码验证工作带来很大的便利。(3) 建立与 MySQL数据库的连接。代码如下:(4) 判定用户是否单击了“进入”按钮,假如是就通过视图chkadmin 对用户身份进行验证。该过程代码如下:.php if$_POSTsubmit.=可编辑资料 - - - 欢迎下载精品名师归纳总结include_onceconn.php。$name=$_POSTnam。e$pwd=$_POSTpwd。$sql=mysql_queryselect * from chkadmin where name=.$name. andpwd=.$pwd.,$conn。$info=mysql_fe
19、tch_array$sql。if$info=falseecho alert用户名或密码输入错误 .。history.back。exit 。elseecho 登录成功 .。.举一反三依据本实例,读者可以:利用视图实现用户信息注册。利用视图实现商品信息的降序输出。可编辑资料 - - - 欢迎下载精品名师归纳总结实例259修改视图实例说明为了提高工作效率,对不中意条件的视图可以通过修改的方式进行更换。实现本实例,第一应在数据库中创建数据表tb_changeview ,该表也可以在phpMyAdmin中创建,如图 9.8 所示。打开“命令提示符”窗口,创建视图userinfo,如图 9.9 所示。更换
20、视图 userinfo,如图 9.10 所示。图 9.8创建表 changeview可编辑资料 - - - 欢迎下载精品名师归纳总结图 9.9创建新视图图 9.10修改视图技术要点MySQL中修改视图可以通过 alter view语句实现, alter view语句详细使用说明如下:alter view algorithm=merge | temptable | undefined view view_name column_list as select_statementwith cascaded | local check optionalgorithm :该参数已经在创建视图中作了介绍,
21、这里不再赘述。view_name:视图的名称。select_statement:SQL语句用于限定视图。实现过程(1) 建立数据库及数据表,本实例中将数据表命名为tb_changeview 。(2) 创建视图 userinfo。代码如下:create view userinfo as select * from tb_changeview可编辑资料 - - - 欢迎下载精品名师归纳总结(3) 查询视图 userinfo。代码如下:select * from userinfo查看执行结果,可以发觉tb_changeview 表中的全部的字段都一一列出。(4) 下面开头修改视图,要求修改后只列出u
22、sername 字段。代码如下: alter view userinfo as select * from tb_changeview(5) 重新查询视图 userinfo,从结果中可以发觉这时只列出 username 一个字段,从而说明视图修改成功。举一反三依据本实例,读者可以:实现修改储备商品信息的视图。实现修改储备用户注册信息的视图。可编辑资料 - - - 欢迎下载精品名师归纳总结实例260应用视图实例说明在实际的 Web开发过程中,多个数据表中可能有很多的字段,但某个模块可能只需要其中的几个字段。 为了提高查询速度和简便操作, 可以将该模块需要的字段单独提取出来放在某视图中, 例如本实
23、例涉及到同学表和成果表, 在建立的视图中只含有与同学成果有关的字段,如图9.11 所示。运行本实例,如图9.12 所示,图中的查询结果显示的字段即为视图中的全部字段。图 9.11创建视图图 9.12同学成果列表技术要点可编辑资料 - - - 欢迎下载精品名师归纳总结本实例创建的视图涉及到多表查询,这说明多个表之间可以通过视图来组合 为一个整体,这样对视图的操作相当于多表查询。 但假如这些表中有相同的字段, 必需按如下方式书写重名的字段:表名 1. 字段名, 表名 2. 字段名实现过程(1) 在“命令提示符”窗口下为数据库建立视图。代码如下:create view scoreinfo as se
24、lect sno,sname,yw,wy,sx from tb_student,tb_score where tb_student.id=tb_score.sid(2) 建立数据库连接文件conn.php 。代码如下:queryset names gb2312。.(3) 查询视图 scoreinfo中的内容,并显示查询结果。代码如下:queryselect * from scoreinfo。$info=$sql-fetch_arrayMYSQLI_ASSOC。if$info=NULLecho 暂无同学信息 。else可编辑资料 - - - 欢迎下载精品名师归纳总结do.fetch_arrayM
25、YSQLI_ASSOC。.举一反三依据本实例,读者可以: 实现多表之间的嵌套查询。实现多表之间相同信息的提取。可编辑资料 - - - 欢迎下载精品名师归纳总结9.3 MySQL储备过程MySQL 5.0以后的版本开头支持储备过程,储备过程具有一样性、高效性、安全性和体系结构等特点,本节将通过详细的实例讲解PHP是如何操纵 MySQL 储备过程的。实例261储备过程的创建实例说明为了保证数据的完整性、一样性,提高应用的性能,常接受储备过程技术。MySQL5.0 之前的版本并不支持储备过程,随着MySQL技术的日趋完善,储备过程将在以后的工程中得到广泛的应用。 本实例将介绍在 MySQL5.0 以
26、后的版本中创建储备过程。技术要点一个储备过程包括名字、参数列表,以及可以包括很多SQL语句的 SQL语句集。下面为一个储备过程的定义过程:create procedure proc_name in parameter integer begindeclare variable varchar20。if parameter=1 then可编辑资料 - - - 欢迎下载精品名师归纳总结set variable=MySQL。elseset variable=PHP。end if。insert into tb name values variable。end。MySQL中储备过程的建立以关键字 cre
27、ate procedure 开头,后面紧跟储备过程的名称和参数。MySQL的储备过程名称不区分大小写, 例如 PROCE1和proce1代表同一个储备过程名。储备过程名不能与MySQL数据库中的内建函数重名。储备过程的参数一般由 3 部分组成。第一部分可以是 in 、out 或 inout 。in 表示向储备过程中传入参数。 out 表示向外传出参数。 inout表示定义的参数可传入储备过程, 并可以被储备过程修改后传出储备过程, 储备过程默认为传入参数,所以参数 in 可以省略。其次部分为参数名。第三部分为参数的类型,该类型为 MySQL数据库中全部可用的字段类型, 假如有多个参数, 参数之
28、间可以用逗号进行分割。MySQL储备过程的语句块以 begin 开头,以 end 终止。语句体中可以包含变量的声明、把握语句、 SQL查询语句等。由于储备过程内部语句要以分号终止, 所以在定义储备过程前应将语句终止标志“。 ”更换为其他字符, 并且该字符在储备过程中显现的几率也应当较低,可以用关键字delimiter更换。例如:mysqldelimiter /储备过程创建之后, 可用如下语句进行删除, 参数 proc_name 指储备过程名。drop procedure proc_name实现过程(1) MySQL储备过程是在“命令提示符”下创建的, 所以第一应当打开“命令提示符”窗口。(2)
29、 进入“命令提示符”窗口后,第一应当登录MySQL数据库服务器,在“命令提示符”下输入如下命令:mysql u 用户名 p 用户密码(3) 更换语句终止符号,本实例将语句终止符更换为“/ ”。代码如下:可编辑资料 - - - 欢迎下载精品名师归纳总结delimiter /(4) 创建储备过程前应第一选择某个数据库。代码如下:use 数据库名(5) 创建储备过程。(6) 通过 call语句调用储备过程。举一反三依据本实例,读者可以:利用储备过程实现多表查询。利用储备过程对商品信息进行降序输出。实例262使用储备过程实现用户注册实例说明在数据库系统开发过程中,假如能够应用储备过程,可以使整个系统的
30、运行 效率有明显的提高, 本实例将向读者介绍 MySQL5.0 版本中储备过程的创建以及PHP调用 MySQL储备过程的方式。运行本实例前,第一应在“命令提示符”下创 建如图 9.13 所示的储备过程, 然后运行本实例, 如图 9.14 所示, 在图中的文本框中输入注册信息后, 单击“注册”按钮, 即可将用户填写的注册信息储存到数据库中,最终储存结果如图 9.15 所示。可编辑资料 - - - 欢迎下载精品名师归纳总结图 9.13创建储备过程图 9.14录入注册信息图 9.15注册信息被储备到 MySQL数据库技术要点本实例的关键技术是如何创建传入参数的储备过程,详细实现代码如下:delimi
31、ter /createprocedure pro_reg innc varchar50,in pwdvarchar50,in email varchar50,in address varchar50begininsertintotb_regname, pwd ,email,addressvalues nc,pwd, email, address 。end。/“delimiter /”的作用是将语句终止符更换为“ / ”。可编辑资料 - - - 欢迎下载精品名师归纳总结“in nc varchar50 in address varchar50”表示要向储备过程中传入的参数。“begin end”表示储备过程中的语句块,它的作用类似于PHP语言中的“ ”。实现过程(1) 通过 PHP预定义类 mysqli ,实现与 MySQL数据库的连接。代码如下:$conn=new mysqlilocalhost,r