- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
案例2-1封装数据库操作类.doc
第二章 应用案例
案例2-1 封装数据库操作类
一、案例描述
考核知识点
MVC模型
练习目标
了解PHP中常用的数据库扩展
掌握封装mysql扩展数据库操作类的方法
需求分析
在MVC模型中,模型是处理数据的,而数据是存储在数据库中的,而在实际项目中,所有对数据库的直接操作,都封装到一个数据库操作类中。而PHP中常用的数据库扩展有mysql扩展、mysqli扩展、PDO扩展,其中对PDO扩展的封装在教材中已讲解,现在来封装mysql扩展数据库操作类,看其与封装PDO扩展有何区别。
设计思路(实现原理)
创建文件:MySQLDB.class.php,编写数据库默认连接信息(服务器地址、端口号、用户名、密码、字符集、默认数据库),同时编写保存连接资源的属性和保存单例实例的属性(私有、静态)。
为了方便在执行过程中,了解执行哪些SQL语句出错,编写一个属性保存执行的所有SQL语句(数组类型)。
编写私有构造方法__construct(),同时传递连接数据库的信息,在方法中实现初始化属性,连接数据库、设定字符集、选择默认数据库的功能。
编写得到单例对象的方法getInstance()。
私有化克隆,防止通过克隆方式获得数据库对象。
编写一个执行SQL语句的方法query(),并在执行SQL前记录该条SQL语句。
编写获取多行数据的方法fetchAll()、获取一行数据的方法fetchRow()和获取一列数据的方法fetchColumn()。
二、案例实现
1、创建文件:\chapter02\MySQLDB.class.php,代码如下:
?php
/**
* 封装mysql扩展数据库操作类
*/
class MySQLDB {
private $_host;//主机
private $_port;//端口
private $_user;//用户
private $_pass;//密码
private $_charset;//字符集
private $_dbname;//默认数据库
private $_link;//保存连接资源
private $_sql = array();//执行的所有SQL
//单例模式 本类对象引用
private static $_instance;
/**
* 私有构造方法
* @param $options array 数据库连接信息
*/
private function __construct($options) {
//初始化属性
$this-_host = isset($options[host]) ? $options[host] : localhost;
$this-_port = isset($options[port]) ? $options[port] : 3306;
//默认:匿名用户
$this-_user = isset($options[user]) ? $options[user] : ; $this-_pass = isset($options[pass]) ? $options[pass] : ;
$this-_charset = isset($options[charset]) ? $options[charset] :
utf8;
//默认:不选择默认数据库
$this-_dbname = isset($options[dbname]) ? $options[dbname] : ;
//连接MySQL服务器
if ($link = mysql_connect($this-_host.:.$this-_port, $this-_user,
$this-_pass)) {
//连接成功
$this-_link = $link;
} else {
//失败
echo 数据库连接失败,请确定数据库服务器参数;
return false;
}
//设定连接字符集
$sql = set names $this-_charset;
$this-query($sql);
//选择默认数据库
if ($this-_dbname !== ) {//设定了某个默认库
$sql = use `$this-_dbname`;//为数据库名增加反引号
$this-query($sql);
}
}
/**
* 得到单例对象的方法
*/
public static function getInstance($options=array()) {
if (! self::$_instance in
文档评论(0)