开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段:封装数据库操作类(设置字符集)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/711/detail/12679
封装数据库操作类(设置字符集)
内容介绍:
一、 设置字符集
二、 总代码及解释
一、设置字符集
连接认证包括数据库选择设定好后,此时还存在一个细节问题:字符集,为了保证数据库连接的正常操作.要新增一个方法设定字符集。
连接认证做好之后数据库也就选择好了,但是还存在一个细节问题,做数据库任何操作之前,先要完成的是字符集的设置,这样才能保证正常运行,不出错误。独立的功能应该有独立的方法,所以新增一个方法来做这件事。
在 Sql 类中增加设定字符集的方法的代码如下:
#在 Sql 类中增加设定字符集的方法
public function charset(){
#调用 mysqli 的设置字符集的函数
$res = @mysqli_set_charset($this->link,$this->charset);
#判定是否成功
if( !$res){
$this->errno = mysqli_errno($this->link);
$this->error = mysqli_error($this->link);
return false;
}
#正确操作
return true;
}
二、总代码及解释
<?Php
#数据库操作类
class Sql{
#设置属性:数据库初始化信息
public $host;
public $port;
pulic $user;
public $pass;
public $dbname;
public $charset;
#构造方法初始化数据:数据较多,应该使用数组来传递数据,关联数组,而且绝大部分的开发者本意是用来测试,所以基本都是本地,因此可以给默认数据
/*
$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();
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;
}
#字符集设置
public function charset(){
#利用 mysqli 实现字符集设置
$res = @mysqli_set_charset($this->link,$this->charset);
#判定结果 if( !$res){
$this->errno = mysqli_errno($this->link);
$this->error = mysqli_error($this->link);
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() );
$s1->charset();
echo $s2->errno,$s2->error;
用到的函数是 mysqli_set_charset,设定的字符集就是当前的字符集,执行结束后,结果不一定成功,有可能字符集是错误的,有可能字符集数据库是不支持的,所以要判定一下结果,如果结果错误,把错误取出来,结果成功就返回。
不需要定义属性,因为错误信息已经存在了,第一步,利用 mysqli 实现字符集设置,抑制错误信息,结果不需要给外部使用,使用局部变量,不需要用属性保留,然后判定结果,信息错误要有错误信息记录;正确操作返回 true,测试一下,如果输出错误信息,后面一直保留,输出结果 true,字符集的设置也就完成了。