MySQL高级应用技术技术.docx

上传人:b****6 文档编号:5255390 上传时间:2022-12-14 格式:DOCX 页数:32 大小:297.29KB
下载 相关 举报
MySQL高级应用技术技术.docx_第1页
第1页 / 共32页
MySQL高级应用技术技术.docx_第2页
第2页 / 共32页
MySQL高级应用技术技术.docx_第3页
第3页 / 共32页
MySQL高级应用技术技术.docx_第4页
第4页 / 共32页
MySQL高级应用技术技术.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

MySQL高级应用技术技术.docx

《MySQL高级应用技术技术.docx》由会员分享,可在线阅读,更多相关《MySQL高级应用技术技术.docx(32页珍藏版)》请在冰豆网上搜索。

MySQL高级应用技术技术.docx

MySQL高级应用技术技术

9.1 PHP的mysqli扩展

在PHP5.0以后的版本中,不仅可以使用早期的MySQL数据库操纵函数,而且还可以使用mysqli扩展技术实现与MySQL数据库的信息交流。

利用mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定。

实例254

 通过mysqli扩展技术实现数据库信息的检索

实例说明

在实际Web工程开发过程中,经常需要对大量信息进行检索,为了营造一种稳定快速的查询环境,本实例将介绍如何利用mysqli扩展技术实现商品信息的检索。

运行本实例,如图9.1所示,在图中文本框中输入要查找的商品名称,单击“查找”按钮,如果该商品存在,则显示该商品的所有信息,否则提示没有查找到该商品。

图9.1 商品信息检索

技术要点

本实例的关键技术是如何利用mysqli技术连接MySQL数据库,并实现数据库信息的检索。

mysqli技术可以使用面向对象和面向过程两种编程思想,本实例将采用当今较为流行的面向对象的编程方式。

采用面向对象的编程方式连接MySQL数据库,将通过PHP的预定义类mysqli实现,该类构造函数说明如下。

mysqli类的构造函数一般由以下4个参数构成。

hostname:

MySQL服务器的地址或主机名。

username:

MySQL服务器中某用户的用户名。

userpwd:

MySQL服务器中某用户对应的用户密码。

databasename:

MySQL服务器中某数据库的名称,该参数可省,如果省略了该参数,则需要利用mysqli的成员函数select_db()指定数据库名称。

所以mysqli预定义类的实例化形式如下:

newmysqli(stringhostname,stringusername,stringuserpwd[,stringdatabasename])。

实现过程

(1)建立如图9.1所示的页面,并建立conn.php文件实现与数据库的连接。

代码如下:

php

$conn=newmysqli("localhost","root","root","db_database09")。

$conn->query("setnamesgb2312")。

?

>

(2)判断提交按钮的值是否为空,如果不为空则开始执行查询。

如果查询到用户要查询的商品,则显示商品的信息,否则提示没有查到该商品。

该过程代码如下:

php

if($_POST[submit]!

="")

 {

 include_once("conn.php")。

 $name=$_POST[name]。

 $sql=$conn->query("select*fromtb_goodswherename like'%".$name."%'")。

 $info=$sql->fetch_array(MYSQLI_ASSOC)。

 if($info==NULL)

  {

 echo"没有查找到该商品!

"。

 }

 else

 {

?

>

 

   。

 

 

   

     

      商品名称

      商品价格

      商品数量

      进货日期

    

   

php

   do

    {

   ?

>

    

      

phpecho$info[name]。

?

>

      

phpecho$info[price]。

?

>

      

phpecho$info[shuliang]。

?

>

      

phpecho$info[addtime]。

?

>

    

 

php

   }

  while($info=$sql->fetch_array(MYSQLI_ASSOC))。

   ?

>

  

 

php

 }

}

?

>

举一反三

根据本实例,读者可以:

 利用mysqli扩展技术,实现指定进货时间段内的商品信息检索。

 利用mysqli扩展技术,实现论坛中注册用户信息的模糊查找。

实例255

 查看服务器连接错误报告

实例说明

作为PHP的黄金搭档MySQL数据库,在PHP工程开发过程中有着举足轻重的作用,这不仅因为MySQL是完全免费的,而且和PHP一样都是完全跨平台的。

但在实际工程开发过程中,PHP与MySQL数据库产生连接错误是不可避免的,本实例将讲解如何实现尽可能早地发现这种连接错误。

运行本实例,分别如图9.2及图9.3所示,图中错误的原因都是当连接数据库服务器时,用户密码输入错误所致。

图9.2 显示错误内容

图9.3显示错误号

技术要点

在mysqli扩展技术中,可以使用两种方式获得错误报告,第一种是直接获取错误的原因,第二种是获取连接错误所代表的错误号。

直接获取错误的名称可以使用函数mysqli_connect_error(),该函数的说明如下:

stringmysqli_connect_error(mysqlilink)

mysqli_connect_error()函数将返回一个错误消息,该消息对应利用mysqli扩展技术连接MySQL数据库时所产生的错误。

获取连接MySQL数据库时产生的错误号可以使用函数mysqli_connect_errno(),该函数说明如下:

intmysqli_connect_errno()

如果在连接MySQL数据库服务器时出现了错误,就会产生一个该错误对应的消息数字,利用该函数就可以获取该数字。

下面为连接MySQL数据库时可能发生错误的错误号及错误内容:

1045:

Accessdeniedforuser'用户名'@'用户密码'(userpassword:

YES)

上述错误代表用户密码输入错误。

2005:

UnknownMySQLserverhost‘MySQL数据库服务器名’(11004)

上述错误代表MySQL数据库服务器名输入错误

2013:

LosetconnectiontoMySQLserverduringquery

上述错误代表在执行查询时失去与MySQL数据库的连接。

实现过程

(1)建立index.php文件,用于建立PHP与MySQL数据库的连接,并输入错误的用户密码。

代码如下:

php

$conn=mysqli_connect("localhost","root","root1")。

echomysqli_connect_errno()。

?

>

(2)建立index_1.php文件,用于建立PHP与MySQL数据库的连接,并输入错误的用户密码。

代码如下:

php

$conn=mysqli_connect("localhost","root","root1")。

echomysqli_connect_error()。

?

>

(3)分别执行index.php文件和index_1.php文件查看结果。

举一反三

根据本实例,读者可以:

 输出MySQL数据库服务器名输入错误时的错误号。

 输出MySQL数据库服务器名输入错误时的错误名称。

实例256

 通过mysqli扩展技术实现多表查询

实例说明

在实际的工程开发过程中,一个工程经常需要多个数据表来存储信息,并且这些表之间通过主键彼此相互联系。

本实例将讲解如何实现多表之间的查询。

运行本实例,如图9.4所示,图中的“学号”和“姓名”字段来自tb_student表,而其他字段来自tb_score表。

图9.4 显示查询的结果

技术要点

利用mysqli技术实现多表查询,关键是如何实现多表之间通过主键进行连接。

下面是本实例实现多表查询的代码:

$sql=$conn->query("select*fromtb_student,tb_scorewhere

tb_student.id=tb_score.sid")。

实现多表之间的查询应在from关键字后列出所有的表名,并且表名之间用逗号进行分割。

同时应在where关键字中指明多表之间的连接条件,例如本例中的tb_student.id=tb_score.sid,表明学生表和成绩表之间通过学生表的id字段和成绩表的sid字段进行连接。

实现过程

(1)建立conn.php文件,实现与MySQL数据库之间的连接。

代码如下:

php

$conn=newmysqli("localhost","root","root","db_database09")。

$conn->query("setnamesgb2312")。

?

>

(2)建立index.php文件,用于实现多表之间的查询,如果学生表和成绩表中有满足条件的记录,则显示这些记录,否则提示没有相关信息。

代码如下:

php

 include_once("conn.php")。

 $sql=$conn->query("select*fromtb_student,tb_scorewheretb_student.id=tb_score.sid")。

 $info=$sql->fetch_array(MYSQLI_ASSOC)。

 if($info==NULL)

  {

 echo"暂无学生信息"。

   }

 else

  {

  do

 {

 ?

>

 

   

phpecho$info[sno]。

?

>

   

phpecho$info[sname]。

?

>

   

phpecho$info[yw]。

?

>

   

phpecho$info[wy]。

?

>

   

phpecho$info[sx]。

?

>

  

 

php

    }

    while( $info=$sql->fetch_array(MYSQLI_ASSOC))。

 }

?

>

举一反三

根据本实例,读者可以:

 实现检索多表信息同时分页显示。

 实现检索多表信息同时降序输出。

实例257

 通过mysqli扩展技术实现内存的回收

实例说明

为了有效利用服务器的内存空间,在获取较大结果集时,一旦结束操作,则有必要回收集合所需要的内存,由于mysqli技术可以采用面向对象和面向过程两种编程方式,所以与之对应的内存回收方式就有两种,将通过本实例讲解内存回收机制在工程开发过程中的价值和使用方法。

运行本实例,如图9.5所示,图中为某班级3门主科成绩,并在显示完该班成绩后,对内存进行了回收。

图9.5 显示查询结果

技术要点

PHP为了迎合不同开发习惯的程序员,在mysqli扩展技术中提供了面向对象和面向过程两种编程方式,所以实现内存回收也存在与之对应的两种方式。

如果采用面向过程的编程方式可以通过如下函数实现内存回收:

boolmysqli_close(objectlink)

link指mysqli_connect()函数返回的数据库连接句柄。

如果采用面向对象的编程方式,可以通过如下语句实现:

link->close()

link指PHP预定义的mysqli类实例化后的对象。

实现过程

(1)建立conn.php文件,实现与MySQL数据库之间的连接。

代码如下:

php

$conn=newmysqli("localhost","root","root","db_database09")。

$conn->query("setnamesgb2312")。

?

>

(2)通过do…while循环显示该班级所有学生的成绩。

代码如下:

php

  include_once("conn.php")。

  $sql=$conn->query("select*fromtb_student,tb_scorewheretb_student.id=tb_score.sid")。

  $info=$sql->fetch_array(MYSQLI_ASSOC)。

  if($info==NULL)

   {

   echo"暂无学生信息"。

   }

   else

   {

   do

  {

  ?

>

  

     

phpecho$info[sno]。

?

>

     

phpecho$info[sname]。

?

>

     

phpecho$info[yw]。

?

>

     

phpecho$info[wy]。

?

>

     

phpecho$info[sx]。

?

>

    

 

php

    }

  while( $info=$sql->fetch_array(MYSQLI_ASSOC))。

 }

(3)实现内存的回收。

代码如下:

$sql->close()。

$conn->close()。

举一反三

根据本实例,读者可以:

 在图书管理系统中,查询完图书信息后实现内存回收。

 在聊天室中,用户每发一次信息实现一次内存回收。

 

 

 

9.2 MySQL视图的应用

视图也称虚表,包括执行某个查询返回的一组记录。

视图可以简化获取数据的方法,并通过别名来实现抽象查询。

实例258

 创建视图

实例说明

为了简化查询,在实际工程开发过程中,通常可以采用为数据库中的某个表建立视图的方式。

在建立的视图中只有开发人员所关心的字段。

运行本实例,如图9.6所示,分别在图中输入登录用户的用户名和密码,单击“进入”按钮后,如果用户输入错误的用户名或密码,则给出错误提示,反之如果输入的用户名和密码正确,则提示成功登录。

由于本实例采用视图建立了虚表,所以应首先在“命令提示符”下建立视图,如图9.7所示。

图9.7 创建视图

技术要点

MySQL中创建视图可以通过createview语句来实现,具体创建格式如下:

create[ordeplace][algorithm={merge|temptable|undefined}]viewview_name[(column_list)]asselect_statement[with[cascaded|local]checkoption]

algorithm={merge|temptable|undefined}属性用于优化MySQL视图的执行,该属性有3个可用的设置。

下面将介绍这3个设置的使用方法。

merge:

该参数使MySQL执行视图时传入的任何子句合并到视图的查询定义中。

temptable:

如果视图低层表中的数据有变化,这些变化将在下次通过表时立即反映出来。

undefined:

当查询结果和视图结果为一一对应关系时,MySQL将algorithm设定为temptable。

view_name:

新建视图的名称。

select_statement:

SQL查询语句用于限定虚表的内容。

实现过程

(1)建立数据库及数据表,本实例中将数据表命名为tb_admin。

(2)建立完数据表后,就可以在命令提示符下建立视图。

创建视图的代码如下:

createviewchkadminasselectname,pwdfromtb_admin

创建完视图chkadmin后,该视图中只含有name和pwd两个字段,这样会给密码验证工作带来很大的方便。

(3)建立与MySQL数据库的连接。

代码如下:

php

$conn=mysql_connect("localhost","root","root")。

mysql_select_db("db_database09",$conn)。

mysql_query("setnamesgb2312")。

?

>

(4)判断用户是否单击了“进入”按钮,如果是则通过视图chkadmin对用户身份进行验证。

该过程代码如下:

php

if($_POST[submit]!

="")

{

  include_once("conn.php")。

  $name=$_POST[name]。

  $pwd=$_POST[pwd]。

  $sql=mysql_query("select*fromchkadminwherename='".$name."'and

pwd='".$pwd."'",$conn)。

  $info=mysql_fetch_array($sql)。

  if($info==false){

  echo""。

  exit。

  }

  else

  {

  echo"
登录成功!

"。

  }

 }

?

>

举一反三

根据本实例,读者可以:

 利用视图实现用户信息注册。

 利用视图实现商品信息的降序输出。

实例259

 修改视图

实例说明

为了提高工作效率,对不满足条件的视图可以通过修改的方式进行更改。

实现本实例,首先应在数据库中创建数据表tb_changeview,该表也可以在phpMyAdmin中创建,如图9.8所示。

打开“命令提示符”窗口,创建视图userinfo,如图9.9所示。

更改视图userinfo,如图9.10所示。

图9.8 创建表changeview

图9.9 创建新视图

图9.10 修改视图

技术要点

MySQL中修改视图可以通过alterview语句实现,alterview语句具体使用说明如下:

alterview[algorithm={merge|temptable|undefined}]viewview_name[(column_list)]asselect_statement[with[cascaded|local]checkoption]

algorithm:

该参数已经在创建视图中作了介绍,这里不再赘述。

view_name:

视图的名称。

select_statement:

SQL语句用于限定视图。

实现过程

(1)建立数据库及数据表,本实例中将数据表命名为tb_changeview。

(2)创建视图userinfo。

代码如下:

createviewuserinfoasselect*fromtb_changeview

(3)查询视图userinfo。

代码如下:

select*fromuserinfo

查看执行结果,可以发现tb_changeview表中的所有的字段都一一列出。

(4)下面开始修改视图,要求修改后只列出username字段。

代码如下:

alterviewuserinfoasselect*fromtb_changeview

(5)重新查询视图userinfo,从结果中可以发现这时只列出username一个字段,从而说明视图修改成功。

举一反三

根据本实例,读者可以:

 实现修改存储商品信息的视图。

 实现修改存储用户注册信息的视图。

实例260

 应用视图

实例说明

在实际的Web开发过程中,多个数据表中可能有很多的字段,但某个模块可能只需要其中的几个字段。

为了提高查询速度和简便操作,可以将该模块需要的字段单独提取出来放在某视图中,例如本实例涉及到学生表和成绩表,在建立的视图中只含有与学生成绩有关的字段,如图9.11所示。

运行本实例,如图9.1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1