PHP 笔记——PDO操作数据库
一、简介
PHP 5.1可使用轻量级的统一接口 PDO(PHP Data Object,PHP数据对象)来访问各种常见的数据库。而使用PDO只需要指定不同的 DSN(数据源名称)即可访问不同的数据库。

二、PDO开启
在Windows中要使用PHP访问MySQL数据库,首先需要在php.ini文件中启用设置:
extension=php_pdo.dll:启用PDO扩展库。
extension=php_pdo_mysql.dll:启用MySQL扩展库。
三、PDO对象初始化
连接服务器:
<?php
header("Content-Type: text/html; charset=utf-8");
$dbms = 'mysql'; // 指定连接的数据库驱动名称
$dbname = 'test'; // 指定要连接的数据库
$username = 'root'; // 指定连接使用的用户名称
$passwd = 'root'; // 指定连接用户的密码
$host = 'localhost:3306'; // 指定 MySQL 服务器名称,注意端口号
$dsn = "$dbms:host=$host;dbname=$dbname"; // 构造 DSN,$dbms 后是冒号,其它参数间是分号
try {
$pdo = new PDO($dsn, $username, $passwd);
echo "使用 PDO 成功连接至 MySQL 服务器<br>";
} catch (PDOException $exc) {
echo "Could not connect to the database<br/>".$exc->getMessage();
}
print_r($pdo);
?>
创建、删除数据库:
<?php
header("Content-Type: text/html; charset=utf-8");
$dbms = 'mysql';
$username = 'root';
$passwd = 'root';
$host = 'localhost:3306';
$dsn = "$dbms:host=$host"; // 连接到服务器创建和删除数据库,所以不需要指定连接的数据库
try {
$pdo = new PDO($dsn, $username, $passwd);
echo "使用 PDO 成功连接至 MySQL 服务器<br>";
$n = $pdo->exec('create database testdb');
echo "$n 成功创建数据库<br>";
$n = $pdo->exec('drop database testdb');
echo "$n 成功删除数据库<br>";
} catch (PDOException $exc) {
echo "数据库连接失败!".$exc->getMessage();
}
?>
四、PDO对象应用
pdo对象成员方法:
query($sql); // 用于执行查询SQL语句。返回PDOStatement对象
exec($sql); // 用于执行增、删、改操作,返回影响行数
setAttribute(); // 设置一个“数据库连接对象”属性
fetchAll(); // 解析数据
记录查询:
(1)使用query()方法执行查询
$sql = "SELECT * FROM stu";
$stmt = $pdo->query($sql);
ps:
query()方法参数为一个查询字符串,查询执行成功返回包含查询结果集的PDOStatement对象,若失败则返回FALSE。
若查询结果集中记录没有读取完,试图再次执行query()方法将会出错。此
时,可在再次执行query()方法前,调用PDOStatement的closeCursor()方法释
放PDOStatement对象关联的数据库资源。
(2)使用预处理查询

- 实现SQL语句的预处理
- 首先需要预处理一个待执行的SQL语句模板
- 然后为该模板进行参数绑定
- 最后将用户提交的数据内容发送给MySQL执行,完成预处理的执行
如果一个查询需要多次执行,则可使用PDO对象的 prepare() 方法预先提交查询,服务器准备一个预处理查询语句。然后可多次调用PDOStatement对象的execute()方法执行查询。
$stmt = $pdo->prepare($sql);
查询执行成功返回包含查询结果集的PDOStatement对象,若失败则返回FALSE。
$sql = "SELECT * FROM users";
$stmt = $pdo->prepare($sql);
// 准备好语句后,调用execute()方法执行查询
$b = $stmt->execute();
var_dump($b);
(3)使用带参数的预处理查询
在预处理查询过程中可对其参数进行设置,分别是使用问号参数、使用命名参数和将参数绑定到变量(:参数名,以冒号开始的参数名)3种方式设置参数。
① 使用问号参数
$stmt = $pdo->prepare("SELECT * FROM users WHERE id>? and data LIKE ?");
$b = $stmt->execute(array(2,"php%"));
var_dump($b);
② 使用命名参数
$stmt = $pdo->prepare("SELECT * FROM users WHERE id>:id and data LIKE :filter");
$b = $stmt->execute(array(':id'=>2,':filter'=>"C%"));
var_dump($b);
③ 将参数绑定到变量
可以将参数绑定到变量,变量的值作为参数值。

如果参数不是命名参数,在绑定时,可使用1开始的整数表示对应参数。

处理查询结果集
不管用query()方法还是execute()方法执行查询操作,查询结果都保存在PDOStatement对象中。可用PDOStatement对象的fetch()、fetchAll()或fetchColumn()方法从查询结果中集中读取数据。
(1)使用fetch()方法读取查询结果
fetch()方法返回一个包含查询结果集下一条记录的数据,已无记录时返回
FALSE。其基本格式为:
$row = $stmt->fetch($fetch_style);
参数 $fetch_style:
PDO::FETCH_NUM:用0开始的整数作为数组元素下标。
PDO::FETCH_ASSOC:用列名作为数组元素下标。
PDO::FETCH_BOTH:默认值,既有整数下标,也有列名下标。
执行:
foreach ( $stmt as $row ){
echo $row['Name']."<br>";
}
while($row = $stmt->fetch()){
echo $row['Name']."<br>";
}
(2)使用fetchAll()方法读取查询结果
fetchAll()方法指返回查询结果集中剩余的全部记录到一个二维数组,无
记录时返回FALSE。其基本格式为:
$rows = $stmt->fetchAll($fetch_style);
执行:
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($rows);
(3)fetchColumn()方法读取查询结果
fetchColumn()方法返回查询结果集下一条记录中指定列的值,已无记
录时返回FALSE。其基本格式为:
$a = $stmt->fetchColumn($n);
$a = $stmt->fetchColumn(); // 获取下条记录的第1列
$a = $stmt->fetchColumn(1); // 获取下条记录的第2列
五、几个例子
例一
<?php
header("Content-Type: text/html; charset=utf-8");
$dbms = 'mysql';
$dbname = 'db_employee';
$username = 'root';
$passwd = 'root';
$host = 'localhost:3306';
$dsn = "$dbms:host=$host;dbname=$dbname";
try {
$pdo = new PDO($dsn, $username, $passwd);
echo "使用 PDO 成功连接至 MySQL 服务器<br>";
} catch (PDOException $exc) {
echo "数据库连接失败!".$exc->getMessage();
}
$sql = 'SELECT * FROM tb_employee';
$stmt = $pdo->query($sql);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($rows);
?>
例二
<?php
header("Content-Type: text/html; charset=utf-8");
$dbms = 'mysql';
$dbname = 'db_employee';
$username = 'root';
$passwd = 'root';
$host = 'localhost:3306';
$dsn = "$dbms:host=$host;dbname=$dbname";
try {
$pdo = new PDO($dsn, $username, $passwd);
echo "使用 PDO 成功连接至 MySQL 服务器<br>";
} catch (PDOException $exc) {
echo "数据库连接失败!".$exc->getMessage();
}
$sql = 'SELECT * FROM tb_employee';
$stmt = $pdo->query($sql);
foreach ( $stmt as $row ){
echo $row['Name']."<br>";
}
?>
例三
<?php
header("Content-Type: text/html; charset=utf-8");
$dbms = 'mysql';
$dbname = 'db_employee';
$username = 'root';
$passwd = 'root';
$host = 'localhost:3306';
$dsn = "$dbms:host=$host;dbname=$dbname";
try {
$pdo = new PDO($dsn, $username, $passwd);
echo "使用 PDO 成功连接至 MySQL 服务器<br>";
} catch (PDOException $exc) {
echo "数据库连接失败!".$exc->getMessage();
}
$sql = 'SELECT * FROM tb_employee';
$stmt = $pdo->query($sql);
while($row = $stmt->fetch()){
echo $row['Name']."<br>";
}
?>
例四
<?php
header("Content-Type: text/html; charset=utf-8");
$dbms = 'mysql';
$dbname = 'db_employee';
$username = 'root';
$passwd = 'root';
$host = 'localhost:3306';
$dsn = "$dbms:host=$host;dbname=$dbname";
try {
$pdo = new PDO($dsn, $username, $passwd);
echo "使用 PDO 成功连接至 MySQL 服务器<br>";
} catch (PDOException $exc) {
echo "数据库连接失败!".$exc->getMessage();
}
$sql = 'SELECT * FROM tb_employee';
$stmt = $pdo->prepare($sql);
$b = $stmt->execute();
while($row = $stmt->fetch()){
echo $row['Name']."<br>";
}
?>
PHP 笔记——PDO操作数据库的更多相关文章
- 使用PDO操作数据库的好处
PDO一是PHP数据对象(PHP Data Object)的缩写. 并不能使用PDO扩展本身执行任何数据库操作,必须使用一个database-specific PDO driver(针对特定数据库的P ...
- php pdo操作数据库
POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题. PDO的特点: 性能.PDO 从一开始就吸取了现有数据库扩展成 ...
- python学习笔记:操作数据库
1.下载安装模块 第一种:cmd下:执行命令下载安装:pip3 install pymysql 第二种:IDE下pycharm python环境路径下添加模块 2.连接数据库 import pymys ...
- PHP使用PDO操作数据库的示例
<pre><?phpheader("Content-type:text/html;charset=utf8");//error_reporting(E_ALL^E ...
- php pdo操作数据库的方法
PDO 安装 你可以通过 PHP 的 phpinfo() 函数来查看是否安装了PDO扩展. 1.在 Unix /linux系统上安装 PDO 在Unix上或Linux上你需要添加以下扩展: exten ...
- java学习笔记—第三方操作数据库包专门接收DataSource-dbutils (30)
Dbutils 操作数据第三方包.依赖数据源DataSource(DBCP|C3p0). QueryRunner – 接收DataSource|Connection,查询数据删除修改操作.返回结果. ...
- MySql笔记之操作数据库
看前引导 ♦MySQL默认的端口号:3306 ♦MySQL中的超级用户:root ♦SQL语句结尾必须以分号结尾 ♦语法使用介绍 花括号 必须有的部分 中括号 可选项 ,可有可无 竖线 从这个当 ...
- PDO操作数据库
- 封装PDO操作数据库
<?php class DatabaseHandler { /** * sql语句查询 */ public static function query_data ($dataName,$sql, ...
随机推荐
- JSON 为王,为什么 XML 会慢慢淡出人们的视野?
目前全球信息基础设施的特点是,拥有大量的数据交换格式.这一点也不奇怪.互联网几乎已经老了,而“物联网”及“大数据”正从概念走进现实.但我仍然相信,在这一领域还有一股较强的历史趋势,推动 JSON 数据 ...
- WebStorm 2016激活
最近在网上找到一个激活webStorm 的好东西.博主说对jetbrains下的所有产品都是可以用这种方式激活的...如:PhpStorm,IntelliJ JDEA等. 但别的产品我没有试过.对于w ...
- Lucene7.2.1系列(三)查询及高亮
系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 一 准备 创建项目并添加Maven依赖 <dependenc ...
- OGG生成数据定义文件的参数NOEXTATTR
./defgen paramfile ./dirprm/jzjj.prm NOEXTATTR In OGG 11.2, there is a new parameter NOEXTATTR. This ...
- FPGA编码规则检查表
FPGA编码规则检查表 -----------------------摘自<FPGA软件测试与评价技术> 中国电子信息产业发展研究院 | 编著 1.一个单独的文件应该只包含一个单独的mod ...
- Ubuntu命令设置ip网关dns
本文系转载,介绍Ubuntu如何设置IP和网络来连接网络 如果是在虚拟机中使用Ubuntu,那么设置之前请先参照我的上一遍文章虚拟机Net方式设置连接外网中的网络设置部分,先设置好主机的网络,然后配置 ...
- nginx升级至1.12.1版本
nginx升级至1.12.1 编号 名称 说明 1 nginx-1.12.1.tar.gz nginx安装程序 2 nginx_upstream_check_module-master.zip 实现后 ...
- c++环境配置 Eclipse+mingw-get-setup
1,到官网下载eclipse 和 mingw-get-setup 2,先安装eclipse,然后等着... 3,再安装mingw-get-setup, 等待...安装完成后打开,选择basic s ...
- GPS 与 北斗 初步对比
一.脉冲 GPS每秒可获得一次卫星星历电文,秒脉冲的误差服从正态分布,锁住的可用卫星达到四颗以上时,授时脉冲的1精度在100 ns以内:当锁住的可用卫星少于四颗时,解算方程组的信息不够充分,授时精度将 ...
- 百度NLP二面-电话面
实验室项目:1.实验室方向 2.用两分钟介绍自己的项目,创新点在哪里 个人项目: 1.自己实现的贝叶斯分类器,目的,怎么做的 2.怎么计算各个分类的先验.(因为我使用的训练预料是每个分类10篇 ...