资源描述
生物信息学数据库设计,第三章PHP数据库编程,2,学习内容,PHP基础PHP基本数据类型PHP条件与循环PHP字符串与正则表达式PHP数组PHP函数PHP数据库编程,3,MySQL应用基础,客户端程序和实用工具介绍myisampack:压缩MyISAM表以产生更小的只读表的一个工具mysql:MySQL命令行工具,通过交互方式输入SQL语句或从文件以批处理模式执行SQL语句。mysqlaccess:检查访问权限的主机名、用户名和数据库组合的客户端工具。mysqladmin:执行管理操作的客户端程序,用于创建或删除数据库、重载授权表、将表刷新到硬盘上及重新打开日志文件mysqlbinlog:从二进制日志读取语句的工具。mysqlcheck:表维护程序,用于检查、修复、分析及优化表。mysqldump:将MySQL数据库转储到一个文件(如SQL语句或tab分隔符文本文件)。mysqlhotcopy:数据库备份程序,可在MySQL服务器运行时快速备份MyISAM或ISAM表。mysqlimport:数据导入程序,使用LOADDATAINFILE将文本文件导入MySQL数据库的相关表中。mysqlshow:显示数据库、表、列及索引相关信息的客户端程序。perror:显示系统或MySQL错误代码含义的工具。replace:更改文件中或标准输入中字符串的实用工具。,mysql命令行工具1.调用mysql命令提示符下调用mysql:mysql-hhostname-uusername-ppassword其中hostname指定要连接的MySQL服务器的主机名,若要连接本机上的MySQL服务器,主机名可用localhost表示;username指定用户名,如root;password表示登录密码,如123456。若使用了-p选项而未指定密码,则会显示“EnterPassword:”,提示输入密码。,4,创建、显示和删除数据库1.创建数据库CREATEDATABASE|SCHEMAIFNOTEXISTSdb_namecreate_specification,create_specification.create_specification:DEFAULTCHARACTERSETcharset_name|DEFAULTCOLLATEcollation_name2.显示数据库列表SHOWDATABASESLIKEpattern3.删除数据库DROPDATABASE|SCHEMAIFEXISTSdb_name,5,表的创建与维护1.表的创建CREATETEMPORARYTABLEIFNOTEXISTStbl_name(column_definition,.)CHARACTERSETcharset_nameCOLLATEcollation_nameCOMMENTstring2.查看表信息SHOWFULLTABLESFROMdb_nameLIKEpattern3.查看列信息SHOWFULLCOLUMNSFROMtbl_nameFROMdb_nameLIKEpattern,6,4.表的修改ALTERIGNORETABLEtbl_namealter_specification,alter_specification.alter_specification:ADDCOLUMNcolumn_definitionFIRST|AFTERcol_name|ADDCOLUMN(column_definition,.)|ALTERCOLUMNcol_nameSETDEFAULTliteral|DROPDEFAULT|CHANGECOLUMNold_col_namecolumn_definitionFIRST|AFTERcol_name|MODIFYCOLUMNcolumn_definitionFIRST|AFTERcol_name|DROPCOLUMNcol_name|DROPPRIMARYKEY|RENAMETOnew_tbl_name5.表的重命名RENAMETABLEtbl_nameTOnew_tbl_name,tbl_name2TOnew_tbl_name2.6.表的删除DROPTEMPORARYTABLEIFEXISTStbl_name,tbl_name.,7,插入记录1.使用指定值插入记录INSERTLOW_PRIORITY|DELAYED|HIGH_PRIORITYIGNOREINTOtbl_name(col_name,.)VALUES(expr|DEFAULT,.),(.),.ONDUPLICATEKEYUPDATEcol_name=expr,.2.从一个表向另一个表插入记录INSERTLOW_PRIORITY|HIGH_PRIORITYIGNOREINTOtbl_name(col_name,.)SELECT.ONDUPLICATEKEYUPDATEcol_name=expr,.,8,查询记录SELECTselect_expr,.INTOOUTFILEfile_nameexport_options|INTODUMPFILEfile_nameFROMtable_referencesWHEREwhere_definitionGROUPBYcol_name|expr|positionASC|DESC,.HAVINGwhere_definitionORDERBYcol_name|expr|positionASC|DESC,.LIMIToffset,row_count|row_countOFFSEToffset1.检索未引用任何表的计算列2.检索所有行和列从一个表中检索所有行和列是SELECT语句最简单的应用。在这种情况下,在SELECT子句使用星号(*)表示所有列,并通过FROM子句指定要检索的表。,9,更改记录单表语法:UPDATELOW_PRIORITYIGNOREtbl_nameSETcol_name1=expr1,col_name2=expr2.WHEREwhere_definitionORDERBY.LIMITrow_count多表语法:UPDATELOW_PRIORITYIGNOREtbl_name,tbl_nameSETcol_name1=expr1,col_name2=expr2.WHEREwhere_definition,10,删除记录单表语法:DELETELOW_PRIORITYQUICKIGNOREFROMtbl_nameWHEREwhere_definitionORDERBY.LIMITrow_count多表语法:DELETELOW_PRIORITYQUICKIGNOREtbl_name.*,tbl_name.*.FROMtable_referencesWHEREwhere_definition或者:DELETELOW_PRIORITYQUICKIGNOREFROMtbl_name.*,tbl_name.*.USINGtable_referencesWHEREwhere_definition,11,权限管理1.设置权限GRANTpriv_type(column_list),priv_type(column_list).ONTABLE|FUNCTION|PROCEDUREtbl_name|*|*.*|db_name.*TOuserIDENTIFIEDBYPASSWORDpassword,userIDENTIFIEDBYPASSWORDpassword.REQUIRENONE|SSL|X509CIPHERcipherANDISSUERissuerANDSUBJECTsubjectWITHGRANTOPTION|MAX_QUERIES_PER_HOURcount|MAX_UPDATES_PER_HOURcount|MAX_CONNECTIONS_PER_HOURcount|MAX_USER_CONNECTIONScount2.撤销权限第一种语法:REVOKEpriv_type(column_list),priv_type(column_list).ONTABLE|FUNCTION|PROCEDUREtbl_name|*|*.*|db_name.*FROMuser,user.第二种语法:REVOKEALLPRIVILEGES,GRANTOPTIONFROMuser,user.,12,七PHP数据库编程,从根本上来说,PHP是通过预先写好的一些列函数来与MySQL数据库进行通信,向数据库发送指令、接收返回数据等都是通过函数来完成。下图给出了一个普通PHP程序与MySQL进行通信的基本原理示意图。,13,14,上图展示了PHP程序连接到MySQL数据库服务器的原理。可以看出,PHP通过调用自身的专门用来处理MySQL数据库连接的函数,来实现与MySQL通信。而且,PHP并不是直接操作数据库中的数据,而是把要执行的操作以SQL语句的形式发送给MySQL服务器,由MySQL服务器执行这些指令,并将结果返回给PHP程序。MySQL数据库服务器可以比作一个数据管理员。其他程序需要这些数据时,只需要向管理员提出请求,管理员就会根据要求进行相关的操作或返回相应的数据。,15,16,明白了PHP操作MySQL的流程,我们就很容易掌握PHP操作MySQL的相关函数。因为以上几乎每一个步骤,都有相应的函数与之对应。开发PHP数据库程序时,只需要按照流程调用相关函数,数据库操作便可轻松实现。最常用的有mysql_connect()、mysql_select_db()、mysql_query()、mysql_fetch_array()、mysql_num_rows()、mysql_close()等。,17,7.1创建数据库连接1.创建非持久连接resourcemysql_connect(stringserver,stringusername,stringpassword,boolnew_link,intclient_flags)2.创建持久连接resourcemysql_pconnect(stringserver,stringusername,stringpassword,intclient_flags)3.选择数据库boolmysql_select_db(stringdatabase_name,resourcelink_identifier)4.关闭MySQL连接boolmysql_close(resourcelink_identifier),18,mysql_connect()函数resourcemysql_connect(stringserver,stringusername,stringpassword)该函数返回类型为resource型,即资源型。三个参数分别为MySQL服务器地址、MySQL用户名、密码。这里的用户名可以用超级管理员的,也可以用用户表中存在的其他用户。如果出现下列提示:Warning:mysql_connect()function.mysql-connect:UnknownMySQLserverhost则说明MySQL服务器地址错误,可能是输入有错误,或者服务器没有启动,或者端口号不对。这时可以检查函数的第一个参数是否提供正确,MySQL是否已成功启动。,19,还有可能出现下列提示:Warning:mysql_connect()function.mysql-connect:Accessdeniedforuser这说明用户名或密码有错误。或者本帐号没有在本MySQL服务器上登陆的权限。我们这里之所以如此详细地讲解该函数,就是因为这时连接到MySQL数据库的第一步。只要这一步成功了,那么下面的所有函数便都能运行。连接到数据库是一切工作的起点。因此必须保证此步骤成功,才能继续下面的内容。,20,mysql_select_db()函数设置活动的MySQL数据库。如果成功,则该函数返回true。如果失败,则返回false。,21,$GLOBALS(Global变量)包含一个引用指向每个当前脚本的全局范围内有效的变量。$_SERVER(服务器变量)变量由web服务器设定或者直接与当前脚本的执行环境相关联。$_GET(HTTPGET变量)经由URL请求提交至脚本的变量。$_POST(HTTPPOST变量)经由HTTPPOST方法提交至脚本的变量。,22,$_COOKIE(HTTPCookies)经由HTTPCookies方法提交至脚本的变量。$_FILES(HTTP文件上传变量)经由HTTPPOST文件上传而提交至脚本的变量。$_ENV(环境变量)执行环境提交至脚本的变量。$_REQUEST(Request变量)经由GET,POST和COOKIE机制提交至脚本的变量,因此该数组并不值得信任。所有包含在该数组中的变量的存在与否以及变量的顺序均按照php.ini中的variables_order配置指示来定义$_SESSION(Session变量)当前注册给脚本会话的变量。,23,为了避免访问MySQL数据库时出现乱码现象,对数据库连接文件进行修改,即在PHP代码块末尾添加以下语句:mysql_query(SETNAMESgb2312);还应当把PHP页的字符集设置为简体中文,这可以通过设置文件首部的标记来实现,代码如下:,24,在网页的数据传递中不外乎两种方式,一种是接收表单数据(也称为POST方法),另一种是URL附加数据(也称为GET方法)。代码诸如“5-2.php?show_tag=1boolmysql_close(resourcelink_identifier)本函数只有一个可选参数link_identifier。此参数表示要关闭的连接的ID。也就是mysql_connect()函数执行成功后返回的一个连接标记。参数为空时表示关闭当前连接。该函数返回一个布尔型结果。当关闭成功时返回true,关闭失败是返回false。,32,mysql_close()函数,33,3.获取记录集的行数和列数用mysql_num_rows()函数可以取得记录集中包含的行数:intmysql_num_rows(resourceresult)用mysql_num_fields()函数可以取得记录集中包含的字段数目:intmysql_num_fields(resourceresult)4.获取列信息objectmysql_fetch_field(resourceresult,intfield_offset),34,7.3分页显示记录集1.通过编程实现分页显示对于MySQL数据库,分页显示记录集可以通过在SELECT语句中添加LIMIT子句指定要显示的起始记录和终止记录来实现,在一个页面中显示的记录构成一个记录组。通过添加记录集导航条可以在不同记录组之间移动,也可以通过记录计数器来显示总页数、当前页号及记录总数等信息。,35,7.4创建搜索/结果页为了给动态网站添加搜索功能,通常需要创建一个搜索页和一个结果页。在搜索页中,访问者通过HTML表单输入搜索参数并将这些参数传递给服务器上的结果页,由结果页获取搜索参数,连接到数据库并根据搜索参数对数据库进行查询,创建记录集并显示其内容。在某些情况下,也可以把搜索页和结果页合并在一起。,36,7.5通过编程实现添加记录连接到MySQL服务器并选择要访问的数据库。向MySQL服务器发送一个SETNAMESgb2312语句,保证中文字符得到正确处理。通过预定义数组$_POST获取用户通过表单提交的数据,并将这些表单数据应用于INSERTINTO语句中。向MySQL服务器发送一条INSERTINTO语句,从而实现新记录的添加。添加新记录后,可通过调用mysql_affected()函数获取被插入的记录行数:intmysql_affected_rows(resourcelink_identifier),37,7.6快速生成记录更新页一个记录更新页包括以下三个构造模块:用于从数据库表中检索记录的过滤记录集;允许用户修改记录数据的HTML表单;用于更新数据库表的“更新记录”服务器行为。,38,通过主/详细页集合实现记录的选择和更新,在主页中通过链接选择要更新的记录,通过URL参数向详细页传递要更新记录的标识,在详细页中获取该记录标识并据此来检索要更新的记录集,将各个表单控件绑定到相关的记录字段上。有时也将主页和详细页合并在一起。当提交表单时,用预定义数组变量$_POST获取表单变量的值,把这些值作为字段的新值用于UPDATE语句。创建数据库连接,设置字符集,并通过调用mysql_query()函数来执行UPDATE语句以实现记录更新。执行UPDATE语句后,通过调用mysql_affected_rows()来获取被更新的记录行数。这里需要特别指出的是,如果一行记录中的所有字段值都没有发生改变,则MySQL不会执行更新操作。,39,7.7通过编程实现记录删除连接到MySQL服务器并选择要访问的数据库。编写一个DELETE语句,并通过WHERE子句来指定要删除哪些记录;通常是列出一个记录列表,让用户通过超链接来选择要删除的记录。若要删除多条记录,则可以在记录列表为每行记录添加一个复选框。当用户单击提交按钮时,通过调用mysql_query()函数向MySQL服务器发送一个DELETE语句,以完成记录删除操作。如果需要,可以对提交按钮编写客户端脚本,以便让用户对删除操作进行确认。通过调用mysql_affetced_rows()函数获取被删除记录的行数。,40,7.8用户注册新会员注册页user_registration.php。当在文本框输入用户名并使光标离开此文本框时,。当用户在该页上输入个人信息并单击【注册】按钮时,如果提交的用户名尚未被他人注册,并且其他字段也符合要求(如两次输入的密码相同、Email地址格式正确),则这些信息会保存在后台数据库中,然后将用户名和角色值保存会话变量中并提示注册成功,自动登录到注册页register.php。如果所提交的会员名已他人被注册,则显示出错信息。,41,检查SESSION,会话,服务器端存储用户信息。登录信息,浏览器版本等。检查输入是否合法。检查数据库记录,是否已经存在。插入数据。,42,Session储存于服务器端(默认以文件方式存储session),根据客户端提供的sessionid来得到用户的文件,取得变量的值,sessionid可以使用客户端的Cookie或者访问的URL的附加数据来传送给服务器,然后服务器读Session的目录。也就是说,sessionid是取得存储在服务上Session变量的身份证。如果配置文件“php.ini”中没有设置“session.auto_start=1”,那么要使用Session就必须先运行代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个sessionid,定义session变量以一定形式存储在刚才产生的session文件中。通过sessionid,可以取出定义的变量。,43,不积跬步,无以至千里;不积小流,无以成江海。,
展开阅读全文