【小白专用】PHP基础知识 - PHP 使用 PDO

1.2 PDO介绍

1.2.1 连接数据库方式

方法一:mysql扩展【这种方式php7已经淘汰】
方法二:mysqli扩展
方法三:PDO扩展

1.2.2 PDO介绍

PDO(PHP Data Object)扩展为PHP访问各种数据库提供了一个轻量级,一致性的接口。无论访问什么数据库,都可以通过一致性的接口去操作。

【小白专用】PHP基础知识 - PHP 使用 PDO_第1张图片

1.2.3 开启PDO扩展

开启PDO连接MySQL扩展,在php.ini文件里面.

extension=pdo_mysql

【小白专用】PHP基础知识 - PHP 使用 PDO_第2张图片

1.3 PDO核心类

1、PDO类:表示PHP和数据库之间的一个连接
2、PDOStatement 类
​ 第一:表示执行数据查询语句(select ,show)后的相关结果集
​ 第二:预处理对象
3、PDOException类:表示PDO的异常

【小白专用】PHP基础知识 - PHP 使用 PDO_第3张图片

1.4 实例化PDO对象

语法

1.4.1 DSN

DSN:data source name,数据源名称,包含的是连接数据库的信息,格式如下:

$dsn=数据库类型:host=主机地址;port=端口号;dbname=数据库名称;charset=字符集

数据库类型:

MySQL数据库	=>	mysql:
oracle数据库	=>	oci:
SQL Server 		=>sqlsrv:
具体驱动类型参见手册“PDO驱动”

1.4.2 实例化PDO

实例化PDO的过程就是连接数据库的过程

1.4.3 注意事项

1、如果连接的是本地数据库,host可以省略

5、host、port、dbname、charset不区分大小写,没有先后顺序

6、驱动名称不能省略,冒号不能省略(因为冒号是驱动名组成部分),数据库驱动只能小写

1.5 使用PDO
1.5.1 执行数据操作语句
方法:p d o − > e x e c ( pdo->exec(pdo−>exec(sql),执行数据增、删、改语句,执行成功返回受影响的记录数,如果SQL语句错误返回false。
 

1.5.2 执行数据查询语句
方法:p d o − > q u e r y ( pdo->query(pdo−>query(sql),返回的是PDOStatement对象
 

query('select * from user');
//var_dump($stmt);        //object(PDOStatement)
//2、获取数据
//2.1  获取二维数组
//$rs=$stmt->fetchAll();  //默认返回关联和索引数组
//$rs=$stmt->fetchAll(PDO::FETCH_BOTH);     //返回关联和索引数组
//$rs=$stmt->fetchAll(PDO::FETCH_NUM);      //返回索引数组
//$rs=$stmt->fetchAll(PDO::FETCH_ASSOC);    //返回关联数组
//$rs=$stmt->fetchAll(PDO::FETCH_OBJ);        //返回对象数组

//2.2  获取一维数组,匹配完成后指针下移一条
//$rs=$stmt->fetch();     //关联和索引数组
//$rs=$stmt->fetch(PDO::FETCH_NUM);   //索引数组
//例题:通过while循环获取所有数据
/*
while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
    $rs[]=$row;
}
echo '
';
var_dump($rs);
 */

//3.3  匹配列:匹配当前行的第n列,列的编号从0开始,匹配完毕后指针下移一条
//echo $stmt->fetchColumn();  //获取当前行的第0列
//echo $stmt->fetchColumn(1);  //获取当前行的第1列

//3.4  总行数,总列数
/*
echo '总行数:'.$stmt->rowCount(),'
'; echo '总列数:'.$stmt->columnCount(); */ //3.5 遍历PDOStatement对象(PDOStatement对象是有迭代器的) foreach($stmt as $row){ echo $row['Host'],'-',$row['User'],'
'; }

【小白专用】PHP基础知识 - PHP 使用 PDO_第4张图片

1.7 单例模式封装MyPDO类

1.7.1 步骤

1、单例模式

2、初始化参数

3、连接数据库

4、执行增删改

5、执行查询

​ a)返回二维数组

​ b)返回一维数组

​ c)返回一行一列

1.7.2 代码实现

第一部分:单例、初始化参数、实例化PDO

initParam($param);
        $this->initPDO();
    }
    private function __clone() {
    }
    public static function getInstance($param=array()){
        if(!self::$instance instanceof self)
            self::$instance=new self($param);
        return self::$instance;
    }
    //初始化参数
    private function initParam($param){
        $this->type=$param['type']??'mysql';
        $this->host=$param['host']??'127.0.0.1';
        $this->port=$param['port']??'3306';
        $this->dbname=$param['dbname']??'data';
        $this->charset=$param['charset']??'utf8';
        $this->user=$param['user']??'root';
        $this->pwd=$param['pwd']??'alibaba123456';
    }
    //初始化PDO
    private function initPDO(){
        try{
            $dsn="{$this->type}:host={$this->host};port={$this->port};dbname={$this->dbname};charset={$this->charset}";
            $this->pdo=new PDO($dsn, $this->user, $this->pwd);
        } catch (PDOException $ex) {
            echo '错误编号:'.$ex->getCode(),'
'; echo '错误行号:'.$ex->getLine(),'
'; echo '错误文件:'.$ex->getFile(),'
'; echo '错误信息:'.$ex->getMessage(),'
'; exit; } } //显示异常 private function showException($ex,$sql=''){ if($sql!=''){ echo 'SQL语句执行失败
'; echo '错误的SQL语句是:'.$sql,'
'; } echo '错误编号:'.$ex->getCode(),'
'; echo '错误行号:'.$ex->getLine(),'
'; echo '错误文件:'.$ex->getFile(),'
'; echo '错误信息:'.$ex->getMessage(),'
'; } //设置异常模式 private function initException(){ $this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } //执行增、删、改操作 public function exec($sql){ try{ return $this->pdo->exec($sql); } catch (PDOException $ex) { $this->showException($ex, $sql); exit; } } //获取自动增长的编号 public function lastInsertId(){ return $this->pdo->lastInsertId(); } //判断匹配的类型 private function fetchType($type){ switch ($type){ case 'num': return PDO::FETCH_NUM; case 'both': return PDO::FETCH_BOTH; case 'obj': return PDO::FETCH_OBJ; default: return PDO::FETCH_ASSOC; } } //获取所有数据 ,返回二维数组 public function fetchAll($sql,$type='assoc'){ try{ $stmt=$this->pdo->query($sql); //获取PDOStatement对象 $type= $this->fetchType($type); //获取匹配方法 return $stmt->fetchAll($type); } catch (Exception $ex) { $this->showException($ex, $sql); } } //获取一维数组 public function fetchRow($sql,$type='assoc'){ try{ $stmt=$this->pdo->query($sql); //获取PDOStatement对象 $type= $this->fetchType($type); //获取匹配方法 return $stmt->fetch($type); } catch (Exception $ex) { $this->showException($ex, $sql); exit; } } //返回一行一列 public function fetchColumn($sql){ try{ $stmt=$this->pdo->query($sql); return $stmt->fetchColumn(); } catch (Exception $ex) { $this->showException($ex, $sql); exit; } } } //测试 $param=array( ); $mypdo= MyPDO::getInstance($param); //echo $mypdo->exec('delete from news where id=6'); /* if($mypdo->exec("insert into news values (null,'11','1111',unix_timestamp())")) echo '自动增长的编号是:'.$mypdo->lastInsertId (); */ //$list=$mypdo->fetchAll('select * from news'); //$list=$mypdo->fetchRow('select * from news where id=1'); $list=$mypdo->fetchColumn('select count(*) from news'); echo '
';
var_dump($list);

你可能感兴趣的:(php,开发语言)