




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元9数据库管理项目知识要点与目标项目知识要点知识能力目标学时任务1用户和数据安全性1添加和删除用户2授予权限和回收权限任务2备份与恢复1备份和恢复需求分析2数据库备份和恢复3MySQL日志任务3事务和锁1事务处理2事务隔离机制3锁机制【典型工作任务】
数据库日常管理【技能要求】1用户账户管理2角色管理3权限管理4数据备份与恢复【知识要求】:1数据库用户账户设置和管理2权限的合理分配与收回
3理解事务和锁机制4项目实训“员工管理系统”数据库管理2用户和数据安全性用户要访问MySQL数据库,首先必须拥有登录到MySQL服务器的用户名和口令。登录到服务器后,MySQL允许用户在其权限内使用数据库资源。MySQL的安全系统很灵活,它允许以多种不同的方式创建用户和设置用户权限。可以使用CREATEUSER语法添加一个或多个用户,并设置相应的密码。语法格式:CREATEUSER用户名[IDENTIFIEDBY'密码']
用户名的格式为:用户名称@主机名。CREATEUSER用于创建新的MySQL账户。CREATEUSER会在系统本身的mysql数据库的user表中添加一个新记录。要使用CREATEUSER,必须拥有mysql数据库的全局CREATEUSER权限或INSERT权限。如果账户已经存在,则出现错误。添加用户举例【例】添加两个新的用户,king的密码为queen,palo的密码为530415CREATEUSER'king'@'localhost'IDENTIFIEDBY'queen','palo'@'localhost'IDENTIFIEDBY'530415‘;在用户名的后面声明了关键字localhost。这个关键字指定了用户创建的使用MySQL的连接所来自的主机。如果一个用户名和主机名中包含特殊符号如“_”,或通配符如“%”,则需要用单引号将其括起。“%”表示一组主机。如果两个用户具有相同的用户名但主机不同,MySQL将其视为不同的用户,允许为这两个用户分配不同的权限集合。如果没有输入密码,那么MySQL允许相关的用户不使用密码登录。但是从安全的角度并不推荐这种做法。刚刚创建的用户还没有很多权限。它们可以登录到MySQL,但是它们不能使用USE语句来让用户已经创建的任何数据库成为当前数据库,因此,它们无法访问那些数据库的表,只允许进行不需要权限的操作,例如,用一条SHOW语句查询所有存储引擎和字符集的列表。用户的修改与删除删除用户语法格式:DROPUSERuserDROPUSER语句用于删除一个或多个MySQL账户,并取消其权限。要使用DROPUSER,必须拥有mysql数据库的全局CREATEUSER权限或DELETE权限。【例】删除用户king。
DROPUSERking@localhost;如果删除的用户已经创建了表、索引或其他的数据库对象,它们将继续保留,因为MySQL并没有记录是谁创建了这些对象。可以使用RENAMEUSER语句来修改一个已经存在的SQL用户的名字。语法格式:
RENAMEUSER
old_user
TOnew_user【例】将用户palo修改为ken。RENAMEUSER‘palo’@‘localhost’TO‘ken’@‘localhost’;若要将命令立即生效,可用命令:Flushprivileges;修改密码要修改某个用户的登录密码,可以使用SETPASSWORD语句。语法格式:
SETPASSWORD
[FOR用户名]=
'密码'如果不加FOR
用户名,表示修改当前用户的密码。加了则是修改当前主机上的特定用户的密码。用户名的值必须以‘用户名称’@‘主机名'的格式给定。【例】将用户ken的密码修改为queen。
SETPASSWORDFOR'ken'@'localhost'='queen';授予权限新的SQL用户不允许访问属于其他SQL用户的表,也不能立即创建自己的表,它必须被授权。可以授予的权限有以下几组。(1)列权限:和表中的一个具体列相关。(2)表权限:和一个具体表中的所有数据相关。(3)数据库权限:和一个具体的数据库中的所有表相关。(4)用户权限:和MySQL所有的数据库相关。给某用户授予权限可以使用GRANT语句。使用SHOWGRANTS语句可以查看当前账户拥有什么权限。GRANT语法格式:GRANT权限1[(列名列表1)][,权限2[(列名列表2)]]...ON[目标]{表名|*|*.*|库名.*}TO用户1[IDENTIFIEDBY[PASSWORD]'密码1'][,用户2[IDENTIFIEDBY[PASSWORD]'密码2']]...[WITH权限限制1[权限限制2]...]授予权限举例【例】授予用户user1在Book表上的SELECT权限。USEBookstore;GRANTSELECTONBookTOuser1@localhost;
若在TO子句中给存在的用户指定密码,则新密码将原密码覆盖。如果权限授予了一个不存在的用户,MySQL会自动执行一条CREATEUSER语句来创建这个用户,但必须为该用户指定密码。【例】授予user1在Book表上的图书编号列和书名列的UPDATE权限。
GRANTUPDATE(图书编号,书名) ONBook TOuser1@localhost;授予数据库权限(2)授予数据库权限在GRANT语法格式中,授予数据库权限时ON关键字后面跟“*”和“库名.*”。“*”表示当前数据库中的所有表;“库名.*”表示某个数据库中的所有表。【例】授予user1在Bookstore数据库中的所有表的SELECT权限。
GRANTSELECTONBookstore.*TOuser1@localhost;这个权限适用于所有已有的表,以及此后添加到Bookstore数据库中的任何表。【例】授予user1在Bookstore数据库中拥有所有的数据库权限。USEBookstore;GRANTALLON*TOuser1@localhost;授予用户权限(3)授予用户权限最有效率的权限就是用户权限,对于需要授予数据库权限的所有语句,也可以定义在用户权限上。例如,在用户级别上授予某人CREATE权限,这个用户可以创建一个新的数据库,也可以在所有的数据库(而不是特定的数据库)中创建新表。MySQL授予用户权限时priv_type还可以是以下值。●CREATEUSER:给予用户创建和删除新用户的权力。●SHOWDATABASES:给予用户使用SHOWDATABASES语句查看所有已有的数据库的定义的权利。在GRANT语法格式中,授予用户权限时ON子句中使用“*.*”,表示所有数据库的所有表。【例】授予Peter对所有数据库中的所有表的CREATE、ALTERT和DROP权限。GRANTCREATE,ALTER,DROPON*.*TOPeter@localhostIDENTIFIEDBY'ppwd';【例】授予Peter创建新用户的权力。GRANTCREATEUSERON*.*TOPeter@localhost;权限的转移和限制GRANT语句的最后可以使用WITH子句。如果指定为WITHGRANTOPTION,则表示TO子句中指定的所有用户都有把自己所拥有的权限授予其他用户的权利,而不管其他用户是否拥有该权限。【例8.11】授予user3在Book表上的SELECT权限,并允许其将该权限授予其他用户。首先在root用户下授予user3用户SELECT权限:
GRANTSELECTONBookstore.BookTOuser3@localhostIDENTIFIEDBY'123456'WITHGRANTOPTION;接着,以user3用户身份登录MySQL,登录后,user3用户只有查询Bookstore数据库中Book表的权利,它可以把这个权限传递给其他用户(这里假设用户Jim已经创建):GRANTSELECTONBookstore.BookTOJim@localhost;权限的限制WITH子句也可以对一个用户授予使用限制,其中,MAX_QUERIES_PER_HOUR次数表示每小时可以查询数据库的次数;MAX_CONNECTIONS_PER_HOUR次数
表示每小时可以连接数据库的次数;MAX_UPDATES_PER_HOUR次数表示每小时可以修改数据库的次数。MAX_USER_CONNECTIONS次数表示同时连接MySQL的最大用户数。次数是一个数值,对于前三个指定,次数如果为0则表示不起限制作用。【例】授予Jim每小时只能处理一条SELECT语句的权限。GRANTSELECTONBookTOJim@localhostWITHMAX_QUERIES_PER_HOUR1;
回收权限要从一个用户回收权限,但不从USER表中删除该用户,可以使用REVOKE语句,这条语句和GRANT语句格式相似,但具有相反的效果。要使用REVOKE,用户必须拥有mysql数据库的全局CREATEUSER权限或UPDATE权限。用来回收某些特定的权限语法格式:REVOKE权限1[(列名列表1)][,权限2[(列名列表2)]]...ON{表名|*|*.*|库名.*}FROM用户1[,用户2]...回收所有该用户的权限语法格式:REVOKEALLPRIVILEGES,GRANTOPTIONFROM用户名【例】回收用户user3在Book表上的SELECT权限。
REVOKESELECTONBookFROMuser3@localhost;备份与恢复备份和恢复需求分析数据库中的数据丢失或被破坏可能是由于以下原因:(1)计算机硬件故障。由于使用不当或产品质量等原因,计算机硬件可能会出现故障,不能使用。如硬盘损坏会使得存储于其上的数据丢失。(2)软件故障。由于软件设计上的失误或用户使用的不当,软件系统可能会误操作数据引起数据破坏。(3)病毒。破坏性病毒会破坏系统软件、硬件和数据。(4)误操作。如用户误使用了诸如DELETE、UPDATE等命令而引起数据丢失或破坏。(5)自然灾害。如火灾、洪水或地震等,它们会造成极大的破坏,会毁坏计算机系统及其数据。(6)盗窃。一些重要数据可能会遭窃。因此,必须制作数据库的复本,即进行数据库备份,在数据库遭到破坏时能够修复数据库,即进行数据库恢复,数据库恢复就是把数据库从错误状态恢复到某一正确状态。备份和恢复数据库也可以用于其他目的,如可以通过备份与恢复将数据库从一个服务器移动或复制到另一个服务器。MySQL数据库备份有多种可能会导致数据表的丢失或者服务器的崩溃,一个简单的DROPTABLE或者DROPDATABASE的语句,就会让数据表化为乌有。更危险的是DELETE*FROMtable_name,可以轻易地清空数据表,而这样的错误是很容易发生的。因此,拥有能够恢复的数据对于一个数据库系统来说是非常重要的。MySQL有三种保证数据安全的方法。(1)数据库备份:通过导出数据或者表文件的拷贝来保护数据。(2)二进制日志文件:保存更新数据的所有语句。(3)数据库复制:MySQL内部复制功能建立在两个或两个以上服务器之间,通过设定它们之间的主从关系来实现的。其中一个作为主服务器,其他的作为从服务器。本章主要介绍前两种方法。数据库恢复就是当数据库出现故障时,将备份的数据库加载到系统,从而使数据库恢复到备份时的正确状态。恢复是与备份相对应的系统维护和管理操作,系统进行恢复操作时,先执行一些系统安全性的检查,包括检查所要恢复的数据库是否存在、数据库是否变化及数据库文件是否兼容等,然后根据所采用的数据库备份类型采取相应的恢复措施。数据库备份SQL语句用户可以使用SELECTINTO…OUTFILE语句把表数据导出到一个文本文件中,并用LOADDATA…INFILE语句恢复数据。SELECT*INTOOUTFILE'文件名'输出选项 |DUMPFILE'文件名'其中,输出选项为:[FIELDS[TERMINATEDBY'string'][[OPTIONALLY]ENCLOSEDBY'char'][ESCAPEDBY'char']][LINESTERMINATEDBY'string']但是这种方法只能导出或导入数据的内容,不包括表的结构,如果表的结构文件损坏,则必须先恢复原来的表的结构。LOADDATA…INFILE语句是SELECTINTO…OUTFILE语句的补语,该语句可以将一个文件中的数据导入到数据库中。LOADDATAINFILE'文件名.txt'INTOTABLE表名[FIELDS[TERMINATEDBY'string'][[OPTIONALLY]ENCLOSEDBY'char'][ESCAPEDBY'char']][LINES[STARTINGBY'string'][TERMINATEDBY'string']]数据恢复SQL语句【例】备份Bookstore数据库中的Members表中数据到D盘myfile1.txt数据格式采用系统默认。首先导出数据:USEBookstore;SELECT*FROMMembersINTOOUTFILE'D:/myfile1.txt‘;
导出成功后可以查看D盘FILE文件夹下的myfile1.txt文件。【例】文件备份完后可以将文件中的数据导入到member_copy表。先创建member_copy表结构:CREATETABLEmember_copyLIKEmembers;
然后使用LOADDATA命令将D盘myfile1.txt中数据恢复到Bookstore数据库的Member_copy表中。
LOADDATAINFILE'D:/myfile1.txt' INTOTABLEmember_copy;数据备份与恢复SQL语句举例【例】备份Bookstore数据库中的Members表中数据到D盘FILE目录中,要求字段值如果是字符就用双引号标注,字段值之间用逗号隔开,每行以“?”为结束标志。
USEBookstore;SELECT*FROMMembers INTOOUTFILE'D:/myfile2.txt' FIELDSTERMINATEDBY',' OPTIONALLYENCLOSEDBY'"' LINESTERMINATEDBY'?‘;数据备份与恢复SQL语句举例【例】将D盘myfile1.txt中数据恢复到Bookstore数据库的Member_copy1表中。
先创建member_copy1表结构:CREATETABLEmember_copy1LIKEmembers;
然后使用LOADDATA命令将D盘myfile1.txt中数据恢复到Bookstore数据库的Member_copy1表中。LOADDATAINFILE'D:/myfile1.txt' INTOTABLEmember_copy1 FIELDSTERMINATEDBY',' OPTIONALLYENCLOSEDBY'"' LINESTERMINATEDBY'?';数据备份与恢复SQL语句举例日志文件启用日志二进制日志可以在启动服务器的时候启用,这需要修改C:\ProgramFiles\MySQL文件夹中的my.ini选项文件。打开该文件,找到[mysqld]所在行,在该行后面加上以下格式的一行:log-bin[=filename]假设这里filename取名为bin_log。若不指定目录,则在MySQL的data目录下自动创建二进制日志文件。若日志路径指定为C:/appserv/MySQL/bin目录,添加以下一行:log-bin=C:/appserv/MySQL/bin/bin_log保存,重启服务器。日志文件记入文件中的信息类型错误日志记录启动、运行或停止mysqld时出现的问题。查询日志记录建立的客户端连接和执行的语句。更新日志记录更改数据的语句。不赞成使用该日志。二进制日志记录所有更改数据的语句。还用于复制。慢日志记录所有执行时间超long_query_time秒的所有查询或不使用索引的查询MySQL日志文件类型用mysqlbinlog管理日志使用mysqlbinlog实用工具(在windows命令行窗口运行)可以检查二进制日志文件。命令格式为:
mysqlbinlog[options]日志文件名说明:日志文件名是二进制日志的文件名。例如,运行以下命令可以查看bin_log.000001的内容:mysqlbinlogbin_log.000001由于二进制数据可能非常庞大,无法在屏幕上延伸,可以保存到文本文件中:mysqlbinlogbin_log.000001>D:/lbin-log000001.txt使用日志恢复数据的命令格式如下:mysqlbinlog[options]日志文件名|mysql[options]日志管理举例【例】数据数据备份与恢复举例:数据备份过程如下:①在星期一下午1点进行数据库Bookstore的完全备份,备份文件为file.sql。②从星期一下午1点开始用户启用日志,bin_log.000001文件保存了从星期一下午1点以后的所有更改。③在星期三下午1点时数据库崩溃。现要将数据库恢复到星期三下午1点时的状态。恢复步骤如下:①首先将数据库恢复到星期一下午1点时的状态。②然后使用以下命令将数据库恢复到三下午1点时的状态:mysqlbinlogbin_log.000001日志管理命令由于日志文件要占用很大的硬盘资源,所以要及时将没用的日志文件清除掉。以下这条SQL语句用于清除所有的日志文件:RESETMASTER;如果要删除部分日志文件,可以使用PURGEMASTERLOGS语句。语法格式为:PURGE{MASTER|BINARY}LOGSTO'日志文件名’用于删除日志文件名指定的日志文件。或PURGE{MASTER|BINARY}LOGSBEFORE'日期’
用于删除时间在日期之前的所有日志文件。【例】删除2016年5月23日星期一下午1点之前的部分日志文件。PURGEMASTERLOGSBEFORE'2016-05-2313:00:00';事务管理事务ACID属性原子性(A):原子性意味着每个事务都必须被认为是一个不可分割的单元。一致性(C):不管事务是完全成功完成还是中途失败,一致性属性保证了数据库从不返回一个未处理完的事务。隔离性(I):隔离性是指每个事务在它自己的空间发生,和发生在系统中的其他事务隔离,而且事务的结果只有在它完全被执行时才能看到。持久性(D):事务完成后,所做的修改对数据的影响是永久的,即使系统重启或者出现系统故障,数据都可以恢复。添加雇员事务流程事务处理在MySQL中,用户必须关闭自动提交,事务才能由多条SQL语句组成。使用如下语句关闭自动提交:SET@@AUTOCOMMIT=0;开始事务当一个应用程序的第一条SQL语句或者在COMMIT或ROLLBACK语句后的第一条SQL执行后,一个新的事务也就开始了。另外还可以使用一条STARTTRANSACTION语句来显示地启动一个事务。
其格式为:STARTTRANSACTION结束事务:COMMITCOMMIT语句是提交语句,它使得自从事务开始以来所执行的所有数据修改成为数据库的永久部分,也标志一个事务的结束。MySQL使用的是平面事务模型,因此嵌套的事务是不允许的。在第一个事务里使用STARTTRANSACTION命令后,当第二个事务开始时,自动地提交第一个事务。撤消事务:
ROLLBACK回滚事务:ROLLBACKTOSAVEPOINT向已命名的保存点回滚一个事务。如果在保存点被设置后,当前事务对数据进行了更改,则这些更改会在回滚中被撤销。事务处理举例【例】开启一个事务,更新Members表中张三的密码为“1111111”,再回滚,查看其结果。
SET@@AUTOCOMMIT=0;SELECT密码AS事务前密码FROMBookstore.MembersWHERE姓名='张三';BEGIN;UPDATEBookstore.MembersSET密码='111111'WHERE姓名='张三';SELECT密码AS事务中密码FROMBookstore.MembersWHERE姓名='张三';ROLLBACK;SELECT密码AS事务后密码
FROMMembersWHERE姓名='张三';事务隔离级别SQL标准定义了4中隔离级别:序列化(SERIALIZABLE)可重复读(REPEATABLEREAD)提交读(READCOMMITTED)未提交读(READUNCOMMITTED)MySQL的InnoDB事务隔离级别设置的语法格式如下:语法格式:SET[GLOBAL|SESSION]TRANSACTIONISOLATIONLEVELSERIALIZABLE|REPEATABLEREAD|READCOMMITTED|READUNCOMMITTED锁机制1.锁的类型
(1)共享锁
共享锁的粒度是行或者元祖(多个行)。一个事务获取了共享锁之后,可以对锁定范围内的数据执行读操作。(2)排他锁
排他锁的粒度与共享锁相同,也是行或者元祖。一个事务获取了排他锁之后,可以对锁定范围内的数据执行写操作。(3)意向锁
意向锁是一种表锁,锁定的粒度是整个表,分为意向共享锁和意向排他锁两类。意向表示事务想执行操作但还没有真正执行。2.锁粒度
锁的粒度主要分为表锁和行锁。
单元10数据库应用项目知识要点与目标项目知识要点知识能力目标学时任务1PHP编程基础1PHP语言元素2PHP网页处理技术任务2PHP数据库处理1PHP数据库处理技术2PHP数据库编程任务3数据库编程实战1网络图书销售系统实例2学生成绩管理系统实战【典型工作任务】
数据库编程实例【技能要求】1PHP网页处理技术2PHP数据库编程【知识要求】1PHP编程基础2PHP网页处理3PHP数据库编程4项目实训“学生成绩管理系统”实战2一个简单的PHP程序:e6_1.php<?phpecho"helloworld!<BR>";echodate("Y年m月d日H时i分s秒");?>
一个简单的PHP脚本PHP网页程序的标记块可以采用以下两种格式:<?PHP
…
?>(2)<scriptlanguage="php">
…
</script>1.以记事本编辑文件e6_1.php,存放在c:\wamp\www文件夹中2.打开浏览器,输入地址:http://localhost/e6_1.php34PHP网页程序
PHP网页程序的语句是嵌入到HTML网页程序标记中的。
1.PHP语句必须写在PHP开始标记与PHP结束标记之间构成PHP语句体,规范的书写格式是一条PHP语句占一行。2.除控制语句外,一条PHP语句必须以分号(“;”)结束,一行可以写多条语句。3.为了便于理解和阅读程序,在PHP网页程序中注释语句可以采用以下两种方式:(1)/*多行注释语句*/
注释的内容可以占多行。(2)//一行注释语句注释的内容只能占一行。35PHP语言元素1.变量名
(1)所有变量名的首字母必须是“$”符号,第2个字符不能是数字符号,但可以是“_”(下划线)或字母;例如,$book_no、$_id、$phone、$a1是合法的变量名。但是变量名book_no、$12book是非法的变量名。(2)给变量赋值的方法。$book_name="计算机基础";//$book_name字符串变量。$jia_ge=25;$shu_liang=200;
$zi_jin=$jia_ge*$shu_liang;/*$jia_ge,$shu_liang,$zi_jin数值变量*/36PHP语言元素2.运算符
(1)算术运算:
如果$x=20,$y=4,结果是针对$x、$y进行的运算如下:符号说明符号说明+加法运算,$x+$y的结果是24。-减法运算,$x-$y的结果是16。*乘法运算,$x*$y的结果是80。/除法运算,$x/$y的结果是5。%取余数运算,$x%$y的结果是0。**幂运算,$x**2的结果是400。37(2)逻辑运算符
逻辑运算操作的结果是“1”或“0”,分别表示“true”或“false”。符号1符号2说明示例说明==全等比较$x==$y判断两个变量的结果是否相等。not!非运算!$x如果$x是“1",那么示例的结果是“0";如果$x是“0",那么示例的结果是“1"。or||或运算$x||$y如果$x或$y任一是“1",那么示例的结果是“1",否则示例的结果是“0"。and&&与运算$x&&$y如果$x和$y都是“1",那么示例结果是“1",否则示例的结果是“0"。xor异或运算$xxor$y如果$x和$y不相同,那么示例结果是“1",否则示例的结果是“0"。PHP语言元素38(3)组合赋值运算符运算符说明示例展开式+=加法操作$x+=5$x=$x+5-=减法操作$x-=5$x=$x-5*=乘法操作$x*=5$x=$x*5/=除法操作$x/=5$x=$x/5%=取余数操作$x%=5$x=$x%5.=字符连接操作$x.="ab"$x=$x."ab"PHP语言元素39
3.数组的定义一维数组变量:$data[5]共有5个单元,分别是:
$data[0]、$data[1]、$data[2]、$data[3]、$data[4]二维数组变量:$data[4][3],因为$data有两个下标,共有12个单元,分别是:
$data[0,0]、$data[0,1]、$data[0,2]、$data[1,0]、$data[1,1]、$data[1,2]、$data[2,0]、$data[2,1]、$data[2,2]、$data[3,0]、$data[3,1]、$data[3,2]。PHP语言元素40(1)数组定义与赋值:①利用赋值语句
$d[0]=123;$d[1]=456;$d[2]=789;②利用array()函数
$d=array(123,456,789);此时$d共3个单元,$d[0]=123、$d[1]=456、$d[2]=789。$city=array(“北京”,“上海”,“天津”,“重庆”);此时$city共4个单元,其中$city[0]="北京"、$city[1]="上海"、$city[2]="天津"、$city[3]="重庆"。二维数组$v[3][3]的方法是:$v=array(array(23,27,24),array(14,16,19),array(31,35,33));PHP语言元素41(2)显示数组的值:print_r(数组变量名)print_r($d);(3)计算数组元素的个数:count(数组变量名)例如,下列语句显示$d的元素个数:count($d);(4)计算数组元素的总和:array_sum(数组变量名)
array_sum($d);(5)对数组元素进行升序排序:asort(数组变量名)
asort($d);PHP语言元素42PHP语言元素4.函数(1)echo/print是显示函数,用于显示一个或多个变量的值。格式:echo<字符串1>,<字符串1>,…,<字符串n>(2)die/exit函数是显示函数,其职能与echo、print函数的职能相同,但是die/exit函数执行完毕后直接结束程序。格式:die/exit(<字符串1>,<字符串1>,…,<字符串n>)(3)include函数是文件包含函数,用于将一个已经存在的网页程序语句调入到本程序中执行,利用include函数可以实现不同网页程序间的数据交换。格式:include<文件名>43分支结构1.单分支语句
if(〈条件表达式〉){〈分支结构语句体〉}【例】设计文件名是“e6_5_2.php”的网页程序,给定一个身份证号显示持证人的年龄和性别信息。<?php$id=;echo"<BR>身份证号:",$id; echo"<BR>年龄:",date("Y")-substr($id,6,4);/*根据身份证号的第17位是奇数还是偶数显示性别*/ if(substr($id,16,1)%2==0) echo"<BR>性别:女"; else echo"<BR>性别:男";?>
44
2.双分支语句
if(〈条件表达式〉){〈分支结构语句体1〉}else{ 〈分支结构语句体2〉}3.多分支语句
switch(〈条件表达式〉){case值1:
〈分支结构语句体1〉break;case值2:
〈分支结构语句体2〉break;…default: 〈分支结构语句体n〉break;}分支结构45循环结构1.while语句格式:
while(<循环条件表达式>):<循环结构语句体>endwhile;【例】设计文件名是“e6_5_3.php”的网页程序,计算100以内整数的和。<?php$s=0;$i=1;while($i<=100){$s=$s+$i;$i=$i+1;}echo"100以内整数和:",$s;?>462.for语句for([<循环初值>];<循环条件表达式>;<修改循环条件>){<循环体语句>}循环结构【例】设计文件名是“e6_5_4.php”的网页程序,利用随机数函数rand()产生10个随机数,然后将它们逆序显示。<?phpecho"利用随机数函数产生10个随机数:<BR>";for($i=0;$i<10;$i++){ $d[$i]=rand();/*产生一个随机数保存到数组*/ echo$d[$i],"";}/*逆序显示10个随机数,从数组的最大单元开始显示数据*/echo"<BR>逆序显示10个随机数:<BR>";for($i=9;$i>=0;$i--)/*单元地址数递减*/ echo$d[$i],"";?>47
3.do…while语句do{<循环体语句>}while(<循环条件表达式>);【例】设计文件名是“e6_5_5.php”的网页程序,利用随机数函数产生10个随机数,显示它们的和、平均数、偶数个数和奇数个数。<?php$s1=0;$s2=0;/*$s1表示偶数个数,$s2表示奇数个数*/$s=0;$i=0;/*$s表示随机数的总和,$i表示初始变量*/do{$k=rand(); echo$k,"";$s=$s+$k;/*累计求和*/ if($k%2==0)/*判别某数是否为偶数取得余数判断其是否为零即可。*/$s1=$s1+1;else$s2=$s2+1;$i=$i+1;}while($i<10);echo"<BR>上述十个随机数的总和是:",$s,"平均数是:",$s/10;echo"<BR>上述随机数偶数个数是:",$s1,"奇数个数是:",$s2;?>循环结构48PHP语言与网页程序“注册”处理过程客户端服务器网页程序(.html)数据处理(.php)网页程序(html表单):
供用户输入个人资料。
如名称、密码、身份证号、电话、住址、职业。数据处理(php程序):
输入内容进行检测。
如果输入的数据不规范,提示重新输入资料;如果输入的数据符合规范,保存数据到数据库中。49【例】设计静态网页程序e7_2_1.htm,包括两个文本框:①名称是“u_id”的文本框:用于输入身份证号。②名称是“u_pwd”的文本框:用于输入会员密码。输入完相关信息,点击“提交”按钮后,调用动态网页处理程序e7_2_1.php检验输入数据的有效性:身份证号是18个字符,会员密码是6个字符。文本框50(1)“身份证号”,“会员密码”文本框在htm网页文件中代码:
<p>身份证号:<inputname="u_id"type="text"size="20"maxlength="18"><br></p><p>会员密码:<inputname="u_pwd"type="password"size="20"maxlength="6"><br></p>文本框显示名称变量名称变量类型字体大小文本框长度身份证号:存入变量u_id中。
会员密码:存入变量u_pwd中。51(2)网页程序中用表单标记<form>,指明数据的传送方式和数据处理的网页程序文件名。<formaction="数据处理程序文件名"method="表单数据的传送方式">代码如下:<formaction="e7_2_1.php"method="GET">(3)数据的传送方式采用“POST”方式还是“GET”方式;(4)网页页面中需要设计“提交”命令按钮,将客户端输入的数据传送到服务器端,交付给处理数据的网页程序处理,以此实现数据的交互处理。语句如下:<inputname="submit"type="submit"value="提交">文本框e7_2_1.htm代码如下:<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"></head><body><formaction="e7_2_1.php"method="GET"><p>会员登陆</p><hr><p>身份证号:<inputname="u_id"type="text"size="20"maxlength="18"><br></p><p>会员密码:<inputname="u_pwd"type="password"size="20"maxlength="6"><br></p><p><inputname="submit"type="submit"value="提交"></form></body></html>文本框53e7_2_1.php数据处理程序:(1)e7_2_1.htm网页程序输入的数据保存在“u_id”和“u_pwd”变量中,通过“GET”方式提交后交由e7_2_1.php数据处理程序处理,对应的变量名分别是$_GET[“u_id”]和$_GET[“u_pwd”]。(2)判断变量值是否是空值:empty($_GET[“变量名”]);判断变量值的字符个数:strlen(trim($_GET[“变量名”]));判断变量的值是否是数字字符:is_numeric($_GET[“变量名”])函数;显示提示信息并中断程序的执行:die语句。文本框54e7_2_1.php<?php
if(empty($_GET['u_id']))/*如果身份证号是空。*/
die("身份证号不能是空。");/*显示错误提示并终止程序。*/if(strlen(trim($_GET['u_id']))!=18)/*如果身份证号不是18个字符。*/
die("身份证号应是18个字符。"); /*显示错误提示并终止程序。*/if(is_numeric($_GET['u_id'])!=1)/*如果身份证号不是数字字符。*/
die("会员编号应为数字字符。"); /*显示错误提示并终止程序。*/echo"<br>";
if(empty($_GET['u_pwd']))/*如果用户密码是空。*/
die("会员密码不能是空。");/*显示错误提示并终止程序。*/if(strlen($_GET['u_pwd'])!=6)/*如果密码不等于6个字符*/
die("会员密码至少为6个字符。");/*显示错误提示并终止程序。*//*显示身份证号和会员密码。也可以存储到数据库。*/
echo"您输入的身份证号是:".$_GET['u_id']."<br>"; echo"您输入的会员密码是:".$_GET['u_pwd']."<br>"; echo"您输入的会员信息符合设计规范。"; ?>文本框55复选框
复选框是用于接收多个选项中选取的多个选项数据的表单元素。【例7.3】网页程序e7_3_1.htm接收数据的表单元素有7个复选框按钮,它们的名称分别是chk1、chk2、chk3、chk4、chk5、chk6、chk7。当点击“提交”按钮后,将数据传递给数据处理程序e7_3_1.php显示浏览者喜爱的图书类别。56(1)复选框在htm网页文件中代码:
<p><inputname="chk1"type="checkbox"value="计算机基础">计算机基础</p><p><inputname="chk2"type="checkbox"value="程序设计语言">程序设计语言</p><p><inputname="chk3"type="checkbox"value="数据库应用">数据库应用</p><p><inputname="chk4"type="checkbox"value="网页设计语言">网页设计语言</p><p><inputname="chk5"type="checkbox"value="操作系统">操作系统</p><p><inputname="chk6"type="checkbox"value="绘图软件">绘图软件</p><p><inputname="chk7"type="checkbox"value="其他">其他</p>复选框变量名称变量类型变量的值复选框的显示值如果选中复选框1,chk1=“计算机基础”,否则chk1=‘’;……..如果选中复选框7,chk7=“其他”,否则chk7=‘’;57e7_3_1.php<?php$book="";/*步骤一:将喜爱的图书类别拼串,构建$book。*/if(!empty($_GET['chk1']))/*判别复选框1是否是空。*/
$book=$book.$_GET['chk1'].";";if(!empty($_GET['chk2']))$book=$book.$_GET['chk2'].";";if(!empty($_GET['chk3']))$book=$book.$_GET['chk3'].";";if(!empty($_GET['chk4']))$book=$book.$_GET['chk4'].";";if(!empty($_GET['chk5']))$book=$book.$_GET['chk5'].";";if(!empty($_GET['chk6']))$book=$book.$_GET['chk6'].";";if(!empty($_GET['chk7']))$book=$book.$_GET['chk7'].";";/*步骤二:显示喜爱的图书类别。*/
echo"<br>"."你选择的喜爱的计算机图书类别是:"."<br>";
if(empty($book))
echo"无。";
elseecho$book;?>复选框58复选框59选按钮是用于接收从多个选项中选取一个数据项的表单元素。【例7.4】】设计e7_4_1.htm的网页程序,设置4个表单单选钮,分别显示提示“中国银行”、“工商银行”、“招商银行”、“建设银行”提示,选择支付银行的名称。(5)在网页页面设置“银行帐号:”的提示,再设置一个文本框用于接收“银行帐号”的数据;设置“付款金额”提示,再设置一个文本框用于接收“支付金额”的数据。
复选框60(1)单选按钮在htm网页文件中代码:
<inputtype="radio"name="yin_hang"value="中国银行">中国银行
<inputtype="radio"name="yin_hang"value="工商银行">工商银行
<inputtype="radio"name="yin_hang"value="招商银行">招商银行
<inputtype="radio"name="yin_hang"value="建设银行">建设银行单选按钮变量名称变量类型变量的值单选按钮的显示值如果选中单选按钮1,
yin_hang=“中国银行”;如果选中单选按钮2,yin_hang=“工商银行”;如果选中单选按钮3,yin_hang=“招商银行”;如果选中单选按钮4,yin_hang=“建设银行”;e7_4_1.php<?phpif(empty($_POST["yin_hang"]))/*判断付款银行名称是否选择了该按钮。*/die("您没有选择付款银行的名称。");if(empty($_POST[“zhang_hao”]))/*检测是否输入帐号。*/die("您没有输入银行账号信息。"."<br>");if(strlen($_POST[“zhang_hao”])<10)/*检测帐号的位数小于10位*/die("请输入10位银行账号信息。"."<br>");if(!is_numeric($_POST[“jin_e”]))/*检测输入金额是不是数值*/die("金额信息应当为数字。"."<br>");if(($_POST["jin_e"])<0)/*检测输入的金额<0?*/echo"您输入的金额小于零。"."<br>";/*显示银行名称、银行账号、金额。*/echo"<br>你选择的付款银行是:".$yin_hang."<br>";echo"您的银行账号信息:".$_POST["zhang_hao"]."<br>";echo"您输入的金额:".$_POST["jin_e"]."<br>";?>单选按钮62单选按钮63
列表/菜单列表/菜单是用于接收从多个列表选项中选取一项或多项数据的表单元素。【例7.5】设计e7_5_1.htm的网页程序,页面设置“注册时间”、“年”、“月”、“日”的提示,并设置三个表单列表框,分别用于接收注册的“年”、“月”、“日”信息。64(1)单选按钮在htm网页文件中代码:<selectname="select1"size="1"><optionvalue="2007"selected>2007</option><optionvalue="2008">2008</option></select>年变量名称默认值变量的值列表栏的显示值如果选中列表框中第一个值,
select1=“2007”;如果选中列表框中第二个值,select1=“2008”;如果没有选中列表框中任何值,默认为2007被选中,
select1=“2007”;列表/菜单e7_5_1.php<?phpecho"你注册的时间是:";/*显示时间。*/if(!empty($_POST['select1'])) echo$_POST['select1']."年";if(!empty($_POST['select2'])) echo$_POST['select2']."月";if(!empty($_POST['select3'])) echo$_POST['select3']."日"."<br>";?>列表/菜单网页数据交互处理示意图66数据交互需要做以下处理:(1)连接到MySQL服务器。(2)连接到MySQL数据库。(3)检验输入数据或提取数据的有效性,
保存、查询和加工数据表记录的数据。(4)关闭MySQL服务器。连接MySQL服务器连接MySQL服务器的语句格式:
连接服务器变量=mysql_connect(服务器名,用户名,访问密码)
如,连接本地“localhost”、用户名是“root”、访问密码是“123456”的MySQL服务器的语句如下:
$conn=mysql_connect("localhost","root","123456")为了使程序有通用性,常利用变量引用的方法连接到MySQL服务器:$host=“localhost”;$user=“root”;$password-="123456";$conn=mysql_connect($host,$user,$password)如果成功连接MySQL服务器,$conn的值为ture,否则为false。6768连接MySQL服务器连接MySQL服务器的语句格式:
连接服务器变量=mysqli_connect(服务器名,用户名,访问密码)
如果连接本地服务器,服务器名是“localhost”、用户名是“root”、访问密码为“123456”,则连接MySQL服务器的语句如下:$conn=mysqli_connect("localhost","root","123456")为了程序通用性更好,通常使用变量引用的方法连接MySQL服务器:$host=“localhost”;$user=“root”;$password-="123456";$conn=mysqli_connect($host,$user,$password);
如果成功连接MySQL服务器,$conn的值为ture,否则为false。连接MySQL数据库
如果连接MySQL服务器成功后,就可以与服务器中的相关数据库建立连接了。连接MySQL数据库的语句格式:
mysqli_select_db(MySQL连接服务器变量,数据库名)或者:$conn=mysqli_connect(服务器名,用户名,访问密码,数据库名)69关闭MySQL服务器成功连接MySQL服务器后,可以维护服务器存储的数据库和数据表的数据,结束操作后,应当关闭MySQL服务器。
提示:关闭MySQL服务器的操作,往往是在PHP程序执行完毕后自动执行的,因此在设计应用程序时可以不必书写该语句。关闭MySQL服务器的语句格式:mysql_close(连接服务器变量)
70
成功连接上MySQL服务器和服务器中的相关数据库后,就可以通过调用mysqli_query()函数执行SQL命令,实现对数据库的操作。函数格式如下:mysqli_query(连接服务器变量,SQL操作语句)
在PHP网页程序中对MySQL数据库操作,通常将SQL操作语句保存到变量中(如$mysql_command),然后通过mysql_query($mysql_command)语句得到处理结果,再将这个结果保存在结果变量中(如$result)。$mysql_command="createdatabasemy_test";$result=mysqli_query($conn,$mysql_command)ordie("建立数据库文件失败。".mysqli_connect_error());
71执行数据库操作创建表72【例10.12】设计e10_12.php,在bookstore数据库中建立数据表my_test,字段为:书号/变长字符串/30、书名/变长字符串/40、单价/数值/5。<?php$host="localhost";$user="root";$password="123456";$dbase_name="bookstore";$table_name="my_test";$conn=mysqli_connect($host,$user,$password,$dbase_name)ordie("连接MySQL服务器失败。".mysqli_connect_error());echo"MySQL服务器:$host用户名称:$user<br>";echo"数据库:$dbase_name<br>";echo"连接MySQL数据库成功。";echo"数据库:$dbase_name数据表:$table_name<br>";/*数据表的字段为中文时,进行代码转换.*/mysqli_query($conn,"SETNAMES'GB2312'");/*建立数据表$table_name。*/$mysql_command="createtableifnotexists".$table_name;$mysql_command=$mysql_command."(书号varchar(30),书名varchar(40),单价int(5))";$result=mysqli_query($conn,$mysql_command)ordie("建立数据表:$table_name失败!".mysqli_connect_error());echo"成功建立数据表文件:$table_name";?>插入记录73【例10.13】对my_test数据表,增加一条记录,书名是“跟我学网页设计”、书号是“7-503-06342-1”、单价是27。插入该记录的SQL语句如下:insertintomy_test(书号,书名,单价)values(‘7-503-06342-1’,’跟我学网页设计’,27);
将该SQL语句保存到$mysql_command变量:$mysql_command=“insertintomy_test(书号,书名,单价)values(‘7-503-06342-1’,’跟我学网页设计’,27)”;插入记录74<?php$host="localhost";$user="root";$password="123456";$dbase_name="bookstore";$table_name="my_test";$conn=mysqli_connect($host,$user,$password,$dbase_name)ordie("连接MySQL服务器失败。".mysqli_connect_error());echo"MySQL服务器:$host用户名称:$user<br>";echo"连接MySQL数据库成功。";echo"数据库:$dbase_name数据表:$table_name<br>";mysqli_query($conn,"SETNAMES'GB2312'");/*增加记录。*/$mysql_command="insertinto".$table_name."(书号,书名,单价)values(";$mysql_command=$mysql_command."'7-503-06342-1','跟我学网页设计',27)";$result=mysqli_query($conn,$mysql_command)or
die("数据表:$table_name增加记录失败!".mysqli_connect_error());echo"成功增加数据表".$table_name."记录。";?>插入记录程序e10_13.php代码修改记录【例10.14】将my_test表中书名是“跟我学网页设计”的记录改为“跟我学MySQL数据库”。<?php$host="localhost";$user="root";$password="123456";$dbase_name="bookstore";$table_name="my_test";$conn=mysqli_connect($host,$user,$password,$dbase_name)ordie("连接MySQL服务器失败。".mysqli_connect_error());echo"MySQL服务器:$host用户名称:$user<br>";echo"连接MySQL数据库成功。";echo"数据库:$dbase_name数据表:$table_name<br>";/mysqli_query($conn,"SETNAMES'GB2312'");/*增加记录。*/$mysql_command="upd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省成都西蜀实验重点名校2025届初三下学期第18周英语试题考试试题含答案
- 中医眼科讲解课件
- 湖北工程学院《专业论文写作》2023-2024学年第二学期期末试卷
- 辽宁经济职业技术学院《视觉-语音设计实训》2023-2024学年第二学期期末试卷
- 治安管理处罚培训
- 17025培训课件教学课件
- 内蒙古乌兰察布市集宁区2025届高三5月学业能力调研生物试题试卷含解析
- 江西省赣州市赣县2025届三下数学期末质量跟踪监视试题含解析
- 浙江省杭州市西湖区保俶塔实验学校申花路校区2024-2025学年数学五年级第二学期期末经典模拟试题含答案
- 南华大学《植物学》2023-2024学年第一学期期末试卷
- 河南2023年河南省农村信用社员工招聘2600人考试参考题库含答案详解
- 身体知道答案(珍藏版)
- 安徽省高等学校质量工程项目结题报告
- GB/T 22795-2008混凝土用膨胀型锚栓型式与尺寸
- GB/T 19851.15-2007中小学体育器材和场地第15部分:足球门
- GB/T 10095.1-2001渐开线圆柱齿轮精度第1部分:轮齿同侧齿面偏差的定义和允许值
- ICU 呼吸机相关性肺炎预防措施执行核查表
- 汽车吊检测保养记录
- 市政工程安全台账表
- 航天模型的设计、制作与比赛课件
- 高考倒计时60天课件
评论
0/150
提交评论