资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版文本样式,第二级,第三级,第四级,单击此处编辑母版标题样式,8.4,新闻分类管理功能的设计,8.4 新闻分类管理功能的设计,本节主要内容,PDO,(,PHP Data Object,)的介绍,使用,PDO,实现数据库操作层,实现数据库的,CRUD,基于,PDO,数据库操作层实现新闻分类数据访问层,新闻分类列表页面的设计,新闻分类编辑页面的设计,新闻分类添加页面的设计,本节主要内容PDO(PHP Data Object)的介绍,PDO,概述及其使用,在早前的,PHP,版本中,各种不同的数据库扩展各不兼容,每个扩展都有各种的操作函数,导致,PHP,的维护非常困难,可移植性也非常差,。,为了解决这一问题,,PHP,开发了,PDO,数据库抽象层,当选择不同的数据库时,只需修改,PDO,中的,DSN,(数据源)即可。,PDO 概述及其使用在早前的PHP版本中,各种不同的数据库扩,PDO,的安装,安装,PHP 5.1,以上版本都会默认安装,PDO,,但在使用之前,仍需进行一些相关的配置,打开,PHP,的配置文件,php.ini,,在,Dynamic Extensions,一节中,,,将希望使用的数据库,PDO,扩展库前面的注释去掉,重新启动服务器即可。,;extension=PHP_pdo_mssql.dll,/,MSSQL Server PDO,访问驱动,extension=PHP_pdo_mysql.dll,/,MySQL Server PDO,访问驱动,;extension=PHP_pdo_oci.dll,/,Oracle PDO,访问驱动,extension=PHP_pdo_odbc.dll,/,ODBC PDO,访问驱动,extension=PHP_pdo_sqlite.dll,/,Sqlite PDO,访问驱动,PDO的安装安装PHP 5.1以上版本都会默认安装PDO,但,PDO,访问,数据库,的一般步骤,连接,数据库,;,设置,字符集,;,创建,结果集,;,读取,一条记录到数组,;,将,数组元素显示在页面上,PDO访问数据库的一般步骤连接数据库;,创建,PDO,对象连接数据库,在使用,PDO,与数据库交互之前,必须先创建,PDO,对象,。,对象,名,=new PDO(DSN,username,password,driver_options,);,DSN,是数据源名称,用来指定一个要连接的数据库和连接使用的驱动程序,其语法,格式:驱动程序,名,:,参数名,=,参数值,;,参数名,=,参数,值,例如,连接,MySQL,数据库和连接,Oracle,数据库的,DSN,格式分别如下,:,mysql:host=localhost;dbname=db_news;,oci:dbname,=/localhost:1521/mydb,创建PDO对象连接数据库在使用PDO与数据库交互之前,必须先,示例:,PDO,连接到,MySQL,的,db_news,数据库,try,$dsn=mysql:host=localhost;dbname=db_news;,$conn=new PDO($dsn,root,root);,$conn-query(set names utf8);,echo,数据库连接成功,!;,catch(PDOException$ex),print Error:.$ex-getMessage().;,die();,连接到,mysql,数据库的,dsn,创建,PDO,对象,$conn,,用来连接数据库,示例:PDO连接到MySQL的db_news数据库try连,PDO,类中常用方法,序号,方法名,描述,1,query(),执行一条有结果集返回的,SQL,语句,并返回一个结果集,PDOStatement,对象,2,exec(),执行一条,SQL,语句,并返回所影响的记录数,3,lastInsertId(),获取最近一条插入到表中记录的自增,id,值,4,prepare(),负责准备要执行的,SQL,语句,用于执行存储过程等,PDO类中常用方法序号方法名描述1query()执行一条有结,使用,prepare,方法执行预处理语句,PDO,提供了对所预处理语句的支持,预处理语句的作用是:,编译一次,多次执行,。,它会在服务器缓存查询的语法和执行过程,而只在服务器和客户端之间传输有变化的列值,从而减少额外的开销,同时对于复杂查询来说,通过预处理语句可以,避免重复分析、编译和优化,的环境,并能有效,防止,SQL,注入,。,使用prepare方法执行预处理语句PDO提供了对所预处理语,使用,PDO,实现数据库操作层,打开网站,examples,,打开文件夹“,chapter8,”下的“,common,”文件夹,新增一个,PHP,文件,并将文件重命名为“,pdo_common.php,”,用来实现,PDO,数据库,访问方法,。,使用PDO 实现数据库操作层打开网站examples,打开文,使用,PDO,实现数据库操作层,function pdo_get_connect(),/,数据库默认连接信息,$config=,array(,host=127.0.0.1,user,=root,password=root,charset,=utf8,dbname=db_news,port=3306,),;,try,$,dsn=,mysql:host=.$confighost,.;dbname,=.$configdbname,;,$link=new PDO($dsn,$configuser,$configpassword);,$link-query(set names.$configcharset);,catch(PDOException$ex),die(,数据库连接失败,!).$ex-getMessage();,return$link;,使用关联数组保存数据库的各项默认连接信息,mysql,数据库的,dsn,连接信息,设置数据库字符编码,使用PDO 实现数据库操作层 function pdo_ge,使用,PDO,实现数据库操作层,/,执行查询操作,function,pdo_execQuery($strQuery,$params),$link=pdo_get_connect();,$stmt=$link-prepare($strQuery);,$stmt-execute($params);,$result=$stmt-fetchAll(PDO:FETCH_ASSOC);,return$result;,/,执行增、删、改操作,function pdo_execUpdate($strUpdate,$params),$link=pdo_get_connect();,$stmt=$link-prepare($strUpdate);,$result=$stmt-execute($params);,return$result;,使用,preaprea,方法处理预处理语句,使用PDO 实现数据库操作层/执行查询操作使用preap,使用,PDO,实现新闻分类数据访问层,打开网站,examples,,打开文件夹“,chapter8,”下的“,common,”文件夹,新增一个,PHP,文件,并将文件重命名为“,pdo_newsclass.dao.php,”,用来实现,PDO,方法的新闻分类表的数据访问层。,require_once pdo_common.php,;,/,添加新闻分类,function addNewsClass($classname,$classdesc),$,sql=i,nsert into tbl_newsclass(classname,classdesc)values(?,?);,$params=array($classname,$classdesc);,$result=pdo_execUpdate($sql,$params);,return$result;,带,?,占位符的,sql,语句,意味着这两个值为参数,创建参数数组,参数值分别为,$classname,和,$classdesc,的值,使用PDO 实现新闻分类数据访问层打开网站examples,,使用,PDO,实现新闻分类数据访问层,/,编辑新闻分类,function updateNewsClass($classname,$classdesc,$classid),$,sql=,update tbl_newsclass set classname=?,classdesc=?where classid=?,;,$,params=array($classname,$classdesc,$classid);,$result=pdo_execUpdate($sql,$params);,return$result;,/,删除新闻分类,function deleteNewsClass($classid),$sql=,delete from tbl_newsclass where classid=?,;,$,params=array($classid);,$result=pdo_execUpdate($sql,$params);,return$result;,使用PDO 实现新闻分类数据访问层/编辑新闻分类,使用,PDO,实现新闻分类数据访问层,/,根据编号查找新闻分类,function findNewsClassById($classid),$sql=,select*from tbl_newsclass where classid=?,;,$params=array($classid);,$result=pdo_execQuery($sql,$params);,if(count,($result)0)return$result0;,return$result;,/,查找新闻分类信息,function findNewsClass(),$sql=select*from tbl_newsclass;,$params=array();,$result=pdo_execQuery($sql,$params);,return$result;,使用PDO 实现新闻分类数据访问层/根据编号查找新闻分类,新闻分类列表,页,设计思路,新闻类别列表实现对所有已有新闻分类的管理,包括新闻分类的编辑和新闻分类的,删除,。,若新闻分类下有新闻存在,则不能删除新闻分类。删除操作在列表通过用户确认操作后,可以在同一页面完成。,编辑操作将跳转到新闻分类编辑页面完成。,新闻分类列表页设计思路新闻类别列表实现对所有已有新闻分类的管,新闻分类列表,页,的功能设计,新闻分类列表页的功能设计,新闻分类列表页,的功能设计,$,newsclass_rst=findNewsClass();,if(isset($_GETid),$,news_rst=findNewsByClassid($_GETid);,if,(!empty($news_rst),alertGo(,该新闻分类下有新闻,不能删除,newsclasslist.php,);,$result=deleteNewsClass($_GETid);,if($result)alertGo(,新闻分类删除成功,newsclasslist.php);,新闻分类列表页的功能设计,新闻分类列表页,的功能设计,新闻类别管理,类别列表,编号,分类标题,分类描述,操作,编辑,删除,.,跳转地址仅有参数,id,,意味着跳转在网页自身的同时传递参数,id,,,js,代码由用户确认删除操作。,新闻分类列表页的功能设计跳转地,新闻分类编辑,页,设计思路,用户访问新闻列表管理,页面,,可以,选定新闻进行,编辑,即可跳转到新闻分类编辑页面,。,新闻分类编辑页设计思路用户访问新闻列表管理页面,可以选定新闻,新闻分类编辑,页,的功能设计,编辑新闻类别信息,若,$_GET,变量有值传入的话,则将,id,变量提取出来,新闻分类编辑页的功能设计若$_GET变量有值传,新闻分类编辑页,的功能设计,新闻类别管理,编辑新闻类别信息,/,新闻类别标题:,新闻类别描述:,.,思考:若用户直接在地址栏输入,updateNewsclass.php,地址,但没有传递,id,值,会发生什么问题?如何解决?,新闻分类编辑页的功能设计思考:若用户直接在地址栏输入up,新闻分类编辑处理页面,doUpdateNewsclass.php,require./,common/pdo_newsclass.dao.php,$,error=array();,if(empty($error),$,rs=updateNewsClass($save_dataclassname,$save_dataclassdesc,$save_dataclassid);,if($rs),alertGo,(,新闻类别编辑成功,newsclasslist.php);,else,alertBack(,新闻类别编辑失败,);,else,/,调用公共文件,error.php,显示错误提示信息,require./common/error.php;,新闻分类编辑处理页面doUpdateNewsclass.ph,Thank you!,Thank you!,
展开阅读全文