本文目录 前言 1、PDO介绍 1.1 链接数据库方式 1.2 PDO介绍 1.2.1 开启PDO扩展 1.3 PDO核心类 1.4 实例化PDO对象 1.4.1 DSN 1.4.2 实例化PDO 1.4.3 注意事项 2、使用PDO 2.1 执行数据操作语句 2.1.1、增加 2.1.2、改 2.1.3、删 2.1.4、查: 2.1.4.1、返回二维数组 1、返回关联和索引数组 2、返回索引数组 3、返回关联数组 4、返回对象数组 2.1.4.2、返回一维数组 1、默认返回关联和索引数组 2、取索引数组 3、通过循环获取所有数据 2.1.4.3、匹配列 2.1.4.4、匹配总行数、总列数 3、遍历PDOStatement 前言 在
PHP
开发中,数据库操作是不可或缺的一环。
PDO(PHP Data Objects)
作为
PHP
官方推荐的数据库访问层,提供了统一的方法来访问多种数据库,使得数据库操作更加灵活和高效。
本文旨在为您详细介绍
PDO
的使用,从如何开启
PDO
扩展、理解
PDO
核心类,到实例化
PDO
对象并配置
DSN
(数据源名称),再到执行各种数据操作语句(增、删、改、查),最后探讨如何通过
PDOStatement
对象遍历查询结果。
通过本文的学习,您将能够掌握
PDO
的基本用法,学会如何高效、安全地操作数据库,为您的
PHP
应用打下坚实的数据访问基础。
无论您是
PHP
编程的新手,还是希望提升数据库操作效率的开发者,本文都将为您提供宝贵的指导和参考。
1、PDO介绍 1.1 链接数据库方式 方法一:mysql扩展【这种方式php7已经淘汰】 方法二:mysqli扩展 方法三:PDO扩展 1.2 PDO介绍 PDO(PHP Data Object)扩展为PHP访问各种数据库提供了一个轻量级,一致性的接口。
无论访问什么数据库,都可以通过一致性的接口去操作。
1.2.1 开启PDO扩展 开启PDO连接MySQL扩展 extension=php_pdo_mysql.dll 1.3 PDO核心类 1、PDO类:表示PHP和数据库之间的一个连接 2、PDOStatement类 第一:表示执行数据查询语句(select,show)后的相关结果集 第二:预处理对象 3、PDOException类:表示PDO的异常 1.4 实例化PDO对象 语法: __construct($dsn, 用户名, 密码) 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的过程就是连接数据库的过程 例:
$dsn='mysql:host=localhost;port=3306;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
var_dump($pdo);
效果:
1.4.3 注意事项 1、如果连接的是本地数据库,host可以省略。
$dsn='mysql:port=3306;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
var_dump($pdo);
效果如上:
2、如果默认端口号为3306的话,port也可以省略。
$dsn='mysql:dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
var_dump($pdo);
效果如上:
3、charset也省略,如果省略,使用的是默认字符编码。
$dsn='mysql:dbname=data;';
$pdo=new PDO($dsn, 'root', 'root');
var_dump($pdo);
效果如上:
4、dbname也可以省略,如果省略就没有选择数据库: 例:
$dsn='mysql:';
$pdo=new PDO($dsn, 'root', 'root');
var_dump($pdo);
效果:
5、host、port、dbname、charset不区分大小写,没有先后顺序。
例:
$dsn='mysql:port=3306;host=localhost;dbName=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
var_dump($pdo);
效果:
2、使用PDO 2.1 执行数据操作语句 方法:
$pdo->exec($sql)
,执行数据增、删、改语句,执行成功返回受影响的记录数,如果SQL语句错误返回false。
2.1.1、增加
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行数据增加操作语句
if ($pdo->exec("insert into shows values (null, 'kk', 'kkkkk', CURRENT_TIMESTAMP)"))
echo '自动增长的编号是:'.$pdo->lastInsertId(),'
';
效果:
2.1.2、改
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行修改
echo $pdo->exec('update shows set title="bb" where id=2');
效果:
2.1.3、删
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行删除
echo $pdo->exec('delete from shows where id=2');
效果:
2.1.4、查: 2.1.4.1、返回二维数组 1、返回关联和索引数组
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
var_dump($stmt);
echo '
';
// 3、获取数据
// 3.1 获取二维数组
// $rs = $stmt->fetchAll(PDO::FETCH_BOTH) // 默认返回关联和索引
$rs = $stmt->fetchAll(PDO::FETCH_BOTH); // 返回关联和索引数组
echo '
';
var_dump($rs);
效果:
2、返回索引数组
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
var_dump($stmt);
echo '
';
// 3、获取数据
// 3.1 获取二维数组
// $rs = $stmt->fetchAll(PDO::FETCH_BOTH) // 默认返回关联和索引
$rs = $stmt->fetchAll(PDO::FETCH_NUM); // 返回索引数组
echo '
';
var_dump($rs);
效果:
3、返回关联数组
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
var_dump($stmt);
echo '
';
// 3、获取数据
// 3.1 获取二维数组
// $rs = $stmt->fetchAll() // 默认返回关联和索引
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC); // 返回关联数组数组
echo '
';
var_dump($rs);
效果:
4、返回对象数组
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
var_dump($stmt);
echo '
';
// 3、获取数据
// 3.1 获取二维数组
// $rs = $stmt->fetchAll() // 默认返回关联和索引
$rs = $stmt->fetchAll(PDO::FETCH_OBJ); // 返回对象数组
echo '
';
var_dump($rs);
效果:
2.1.4.2、返回一维数组 1、默认返回关联和索引数组 例:
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
var_dump($stmt);
echo '
';
// 3、获取数据
// 3.2 获取一维数组
$rs=$stmt->fetch(); // 默认返回关联和索引数组
echo '
';
var_dump($rs);
效果:
2、取索引数组 例:
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
var_dump($stmt);
echo '
';
// 3、获取数据
// 3.2 获取一维数组
$rs=$stmt->fetch(PDO::FETCH_NUM); // 默认返回索引数组,取一条,取完以后指针下移
echo '
';
var_dump($rs);
效果:
3、通过循环获取所有数据 例:
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
var_dump($stmt);
echo '
';
// 3、获取数据
// 3.2 获取一维数组
while($row=$stmt->fetch(PDO::FETCH_ASSOC)) {
$rs[]=$row;
}
echo '
';
var_dump($rs);
效果:
2.1.4.3、匹配列 例:
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
// 3、获取数据
// 3.3 匹配列
echo $stmt->fetchColumn(); // 默认获取当前行的第0列
// echo $stmt->fetchColumn(1); // 获取当前行第一列
echo '
';
效果:
2.1.4.4、匹配总行数、总列数 例:
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
// 3、获取数据
// 3.4 总行数、总列数
echo '总行数:'.$stmt->rowCount(),'
';
echo '总列数:'.$stmt->columnCount(),'
';
效果:
3、遍历PDOStatement 例:
// 1、实例化PDO
$dsn='mysql:port=3306;host=localhost;dbname=data;charset=utf8';
$pdo=new PDO($dsn, 'root', 'root');
// 2、执行查询
$stmt = $pdo->query('select * from shows');
// PDOStatement对象中是有迭代器的
foreach($stmt as $row) {
echo $row['id'],'-',$row['title'],$row['content'],'-',$row['createTime'];
echo '
';
}
效果:
在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。
