PHP编程进阶:PDO数据库操作实战指南
本文目录
前言1、PDO介绍1.1 链接数据库方式1.2 PDO介绍1.2.1 开启PDO扩展
1.3 PDO核心类1.4 实例化PDO对象1.4.1 DSN1.4.2 实例化PDO1.4.3 注意事项
2、使用PDO2.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的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。