开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段:封装数据库操作类(连接认证)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/711/detail/12678
封装数据库操作类(连接认证)
内容介绍:
一、封装数据库操作类示例
一、封装数据库操作类示例
示例化数据库类的目的是操作数据库,数据库要操作的第一件事就是连接认证所以需要一个连接认证的功能,连接认证是一个独立的功能。这里可以使用 mysqli 面向过程的方法。但是需要建立一个方法来实现连接认证,而且需要考虑连接是否成功,所以要对外提供错误信息,而且要把失败返回给外部。增加 Public $errno()和 Public $error()记录错误信息,增加属性保存连接。
接下来是连接认证,把连接保存下来,过程中用到了主机,用户,密码,数据库,还有端口,最后判定一下结果,结果出错了,把错误信息保留,返回 false,否则返回 true;数据已经记录在对应的连接资源里了,所以不需要返回对应的连接对象。连接过程中,失败、成功都记录下来,用属性记录结果,但是对外提供的结果是false(失败)或 true(成功)。
#数据库操作类
class sql{
#设置属性:数据库初始化信息
public Shost;
public Sport;
pulic Suser;
public Spass;
public Sdbname;
public Scharset;
#构造方法初始化数据:数据较多,应该使用数组来传递数据,关联数组,而且绝大部分的开发者本意是用来测试,所以基本都是本地,因此可以给默认数据
/*
$info = array(
' host' => 'localhost',
' port' => '3306',
' user' => 'root' ,
' pass' => 'root',
' dbname' => 'blog',
' charset' => 'utf8'
)
/*
public function _construct(array $arr()){
#初始化:确保用户传入了数据,否则使用默认值
$this->host = $info[ ' host'] ?? 'localhost';
$this->port = $info['port'] ?? '3306';
$this->user=$info['user']??'root';
$this->pass=$info['pass'] ?? 'root';
$this->dbname=$info['dbname'] ?? 'test';
$this->charset = $info['charset'] ?? 'utf8';
}
}
#连接认证
Public $link;
Public $errno();
Public $error();
为了不报错,加了错误抑制符,而过程中产生的问题不会因为错误抑制符不存在,所以要对结果进行加工,如果有问题,记录错误信息,返回 false
public function connect(){
$this->link=@mysqli_connect($this->host,$this->user,$this->pass,$this->dbname,$this->port);
#加工结果
if(!$this->link){
#记录错误信息返回false
$this->errno = mysqli_connect_errno();
$this->error=iconv('gbk","utf-8',mysqli_connect_error());
return false;
}
#正确返回
return true;
}
}
#接上述代码(类外测试)
$s1 = new SqL();
#使用默认数据库信息
$db = array(
" host' =>"192.168.e.1',
"user' =>" admin ' ,
'pass' =>" admin ' ,
'dbname' => "Taobao'
);
$s2 = new SqL($db);
#使用外部数据库信息
var_dump($s2->connect() );
echo $s2->errno,$s2->error;
做得过程中都可以用局部变量来做,发现会跨方法,以后会在别的地方使用,所以用属性来做。并没有规定属性一定要放在方法前面,可以后续慢慢进行调整,慢慢养成习惯。运行结果是向一个无法连接的网络尝试了一个套接字操作,说明操作是错的。
将
var_dump($s2->connect() );
echo $s2->errno,$s2->error;
改为
var_dump($s1->connect() );
#echo $s2->errno,$s2->error;
重新运行,还是false,再次修改为
var_dump($s1->connect());
echo $s1->errno,$s1->error;
运行结果是 true,说明连接成功了,说明方法没有问题。
要用什么东西就做什么东西,要有什么东西就加什么东西,最终是为了实现这个结果。