PHP连接数据库是非常常用的功能,在初学时,一般使用函数来连接。
$conn=mysqli_connect("localhost","username","password","DB_name");
if(!$conn){
echo "连接数据库localhost失败,具体错误是:".mysqli_connect_error();
}else{
echo "连接数据库localhost成功。";
}
mysqli_close($conn);
函数的方式非常简单,如果不需要报错信息的话,只有2行代码,加上报错信息,也只有6行而已。
我们尝试定义一个类来连接数据库,如下所示:
class Db{
private $Db_host;
private $Db_user;
private $Db_pswd;
private $Db_name;
private $link;
public function __construct($config=array())
{
$this->Db_host = $config["Db_host"];
$this->Db_user = $config["Db_user"];
$this->Db_pswd = $config["Db_pswd"];
$this->Db_name = $config["Db_name"];
$this->connectDb();
$this->selectDb();
}
private function connectDb(){
if(!$this->link = mysqli_connect($this->Db_host,$this->Db_user,$this->Db_pswd)){
echo "连接数据库{$this->Db_host}失败,具体错误是:".mysqli_connect_error();
die();
}
}
private function selectDb(){
if(!mysqli_select_db($this->link,$this->Db_name)){
echo "选择{$this->Db_host}数据库失败,具体错误是:".mysqli_connect_error();
die();
}
}
public function __destruct()
{
mysqli_close($this->link);
}
};
$arr=array(
"Db_host" => "localhost",
"Db_user" => "username",
"Db_pswd" => "password",
"Db_name" => "DB_name"
);
$obj= new Db($arr);
好家伙,直接变成了41行代码,而且概念也麻烦了很多,要定义类,定义成员属性,写构造函数,析构函数,成员方法......似乎并不实用。
如果只停留在“连接”数据库上,那么直接使用函数连接,速度最快。
如果完善一下Db类,将增删改查功能封装进去,那么功能性、代码可读性、可维护性都会提高非常多。
假设我们封装了“增删改查”的公共成员方法,分别是insert_query、delete_query、update_query、select_query,那么操作将是这样的。
include_once "class.php";
$arr=array(
"Db_host" => "localhost",
"Db_user" => "username",
"Db_pswd" => "password",
"Db_name" => "DB_name"
);
$obj= new Db($arr);
$obj->insert_query("INSERT INTO tablename(列名…) VALUES(列值)");
$obj->delete_query("DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]");
$obj->update_query("UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]");
$obj->select_query("SELECT * FROM table_name");
不仅可读性强,而且每次操作数据库后,都会即时输出执行结果、写日志、卸载资源、关闭数据库,操作很规范,性能很节约。
如果用函数连接呢?
$conn=mysqli_connect("localhost","username","password","DB_name");
if(!$conn){
echo "连接数据库localhost失败,具体错误是:".mysqli_connect_error();
}else{
echo "连接数据库localhost成功。";
}
$conn_log=mysqli_connect("localhost","username","password","DB_name");// 日志数据库
if(!$conn_log){
echo "连接数据库localhost失败,具体错误是:".mysqli_connect_error();
}else{
echo "连接数据库localhost成功。";
}
mysqli_close($conn);
$result=mysqli_query($conn,"INSERT INTO tablename(列名…) VALUES(列值)");
echo $result;//输出结果
unset($result);//卸载变量
mysqli_query($conn_log,"INSERT INTO tablename(列名…) VALUES(列值)");//写日志
mysqli_close($conn);
对比可知,类的方式4行就做了4个任务,而没有使用类的话,4行才做了1个任务。
随着任务越来越多,使用了类的代码的优势会越发凸显——干净、快捷、可读、易用。