PHP PDO连接操作数据库教程

小彬 管理员

作者很懒,什么都没留下!

字数180个, 阅读全文: 1 分钟
首页 编程知识 ,PHP 正文

数据库操作类的优点

优点可以说是非常多了,常见的优点就是便于维护、复用、高效、安全、易扩展。例如PDO支持的数据库类型是非常多的,与MYSQLi不同的就是,PDO还支持其他数据库,一套写法多种数据库的匹配,而MYSQLi仅仅是支持MYSQL

代码

Db.PHP

<?PHP
/**
 * 数据库的基本操作
 */
class Db
{
    // 数据库的默认连接参数
    private $dbConfig=[
        'db'=>'MYSQL', // 数据库类型
        'host'=>'localhost', // 主机名称
        'port'=>'3306', // 默认端口
        'user'=>'root', // 用户名
        'pass'=>'root', // 密码
        'charset'=>'utf8', // 默认字符集
        'dbname'=>'edu', // 默认数据库
    ];
    // 新增主键id
    public $insertId = null;
    // 受影响的记录
    public $num = 0;
    // 单例模式,本类的实例
    private static $instance = null;
    // 数据库的连接
    private $conn = null;
    /**
     * Db构造方法
     * 私有化以防止外部实例化
     */
    private function __construct($params=[])
    {
        // 初始化连接参数
        $this->dbConfig = array_merge($this->dbConfig,$params);
        // 连接数据库
        $this->connect();
    }
    /**
     * 禁止外部克隆该实例
     */
    private function __clone()
    {
        // TODO:Implement __clone() method.
    }
    /**
     * 获取当前类的单一实例
     */
    public static function getInstance($params=[])
    {
        if (!self::$instance instanceof self) {
            self::$instance = new self($params);
        }
        return self::$instance;
    }
    private function connect()
    {
        try{
            // 配置数据源DSN
            $dsn = "{$this->dbConfig['db']}:host={$this->dbConfig['host']};port={$this->dbConfig['port']};dbname={$this->dbConfig['dbname']};charset={$this->dbConfig['charset']}";
            // 创建PDO对象
            $this->conn = new PDO($dsn,$this->dbConfig['user'],$this->dbConfig['pass']);
            // 设置客户端字符集
            $this->conn->query("SET NAMES {$this->dbConfig['charset']}");
        }catch (PDOException $e){
            die('数据库连接失败'.$e->getMessage());
        }
    }
    /** 
     * 完成数据表的操作:CURD
     */
    public function exec($sql)
    {
        $num = $this->conn->exec($sql);
        // 如果有受影响的记录
        if($num > 0){
            // 如果是新增操作,初始化新增主键id属性
            if(null !==$this->conn->lastInsertId()){
                $this->insertId = $this->conn->lastInsertId();
            }
            $this->num = $num; // 返回受影响的记录
        }else{
            $error = $this->conn->errorInfo(); // 获取最后操作错误信息的数组
            var_dump($error);
        }
    }
    // 获取单条查询结果
    public function fetch($sql)
    {
        return $this->conn->query($sql)->fetch(PDO::FETCH_ASSOC);
    }
    // 获取多条查询结果
    public function fetchAll($sql)
    {
        return $this->conn->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    }
}
?>

调用

Demo.PHP

<?PHP
/**
 * Db类测试
 */
require_once 'Db.PHP';
// 获取Db类实例
$db = Db::getInstance();
// 新增操作
$sql = "INSERT student SET name='张一鸣', email='ByteDance@qq.com', grade='59', course='golang'";
$db->exec($sql);
echo '成功插入了'.$db->num.'条记录,主键id是'.$db->insertId;
// 删除操作
$sql = "DELETE FROM student WHERE id='4'";
$db->exec($sql);
echo '成功删除了'.$db->num.'条记录';
// 更新操作
$sql = "UPDATE student SET grade='1199' WHERE id='1'";
$db->exec($sql);
echo '成功更新了'.$db->num.'条记录';
// 查询单条操作
$sql = "SELECT id,name,email,grade FROM student WHERE grade < '60'";
$row = $db->fetch($sql);
var_dump($row);
// // 查询多条操作
$sql = "SELECT id,name,email,grade FROM student WHERE grade > '80'";
$rows = $db->fetchAll($sql);
var_dump($rows);
?>
本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.xiaobinblog.com/1070.html
-- 展开阅读全文 --
PHP构造方法__construct()是什么?
« 上一篇 2023-03-01
PHP替换字符串:str_replace()函数
下一篇 » 2023-03-01

发表评论

动态快讯

互动读者

  • 小站长 管理员

    作者很懒,什么都没留下!

    小站长 文章 5 篇
    作者很懒,什么都没留下!
  • 小彬 管理员

    作者很懒,什么都没留下!

    小彬 文章 139 篇
    作者很懒,什么都没留下!

热门文章

1
2
3

最多点赞

小彬 管理员

作者很懒,什么都没留下!

16赞, 阅读:20.0898w
小彬 管理员

作者很懒,什么都没留下!

10赞, 阅读:17.4229w
小彬 管理员

作者很懒,什么都没留下!

16赞, 阅读:17.4214w
小彬 管理员

作者很懒,什么都没留下!

16赞, 阅读:17.4144w

标签TAG