PHP连接数据库:使用类和函数两种方式

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个任务。

随着任务越来越多,使用了类的代码的优势会越发凸显——干净、快捷、可读、易用。

原创文章,作者:STEVE,如若转载,请注明出处:https://shinecloud.com.cn

(0)
上一篇 2022年 10月 19日 下午7:11
下一篇 2022年 10月 22日 下午2:04

相关推荐

  • PHP:单例模式的多功能数据库工具类

    此数据库工具类根据传智播客2018年8月的PHP教程所设计。...

    2022年 10月 28日
    46
  • PHP常量:Const和Define有什么区别?

    在初学PHP时,我对这两个函数有点迷糊,虽然知道如何使用,但不知道设计这两个有什么意义。 Const const是一种语言结构,最早只能用在类(class)内,PHP5.3之后可以用在类外,实现了通用。 Define define是一个函数...

    2022年 10月 19日
    88
  • CentOS 开放端口和防火墙配置

    CentOS 快速开放端口 CentOS升级到7之后,无法使用iptables控制Linuxs的端口,Centos 7使用firewalld代替了原来的iptables。此方案实测也适用于CentOS Stream 9。 查看防火墙状态 查询放行端口列表 开启端口(以添加...

    2022年 11月 7日
    58
  • PHP类:$this和self关键字

    $this是指向对象的指针,self是指向当前类的指针。 来一个案例 $this只能在成员方法中使用。self既可以在成员方法中使用,也可以在静态方法中使用,用来调用类的常量、静态属性和方法。 若在静态方法中调用$this关键...

    2022年 10月 19日
    35
  • PHP:数组变量的序列化和反序列化

    序列化和反序列化是PHP操作数据库、读写文件时常见的操作。 序列化,就是将PHP的变量转化为可保存的、可传输的字符串的过程; 反序列化,则是将(序列化的)字符串转化回变量。 比如,我们需要将某学生的个人信息写...

    2022年 10月 25日
    35

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注