PDO连接数据库步骤
- 1.创建数据库连接配置文件
define('DB_HOST','localhost'); //主机名
define('DB_USER', 'root'); //连接数据库的用户名
define('DB_PWD','******'); //连接数据库密码
define('DB_NAME', 'test'); //数据库名称
define('DB_PORT', '3306'); //数据库端口号
define('DB_TYPE', 'mysql'); //数据库的型号
define('DB_CHARSET', 'utf8'); //数据库的编码方式
define('DB_DSN', DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);//定义PDO的DSN,数据源名,包括主机名,端口号和数据库名称。
//PDO驱动程序的名称,后面为一个冒号,再后面是可选的驱动程序连接数据库变量信息,如主机名、端口和数据库名。
$dsn='mysql:host=localhost;dbname=apple';
- 2.连接数据库设置字符集并抛出异常
// 引入mysqli配置文件
require "config.php";
//
try {
// 数据库连接,得到一个PDO对象
$pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
//捕捉特定于数据库信息的PDOEXCEPTION 异常
} catch(PDOException $e) {
echo $e->getMessage();
//捕捉拥有Throwable接口的错误或者其他异常
} catch (Throwable $e) {
echo $e->getMessage();
}
- 3.定义sql语句
例:
$sql = "select * from stu";
- 4.执行sql语句
// query() — 执行 SQL 语句,以 PDOStatement 对象形式返回结果集
例:
$stmt = $pdo->query($sql);
// 遍历输出结果集
foreach ($stmt as $v) {
echo $v['name'],'<br>';
}
exec()执行一条 UPDATE,DELETE,INSERT SQL 语句,并返回受影响的行数
例:
$stmt = $pdo->exec($sql);
- PDO常用方法及其应用
errorInfo() — 获取上一次句柄上一次操作的错误信息数组
errorCode() — 获取跟数据库句柄上一次操作相关的 SQLSTATE码
PDO::lastInsertId() 返回最后插入行的ID或序列值
PDOStatement::fetch() 是用来获取一条记录
PDOStatement::fetchAll() 是获取所有记录集到一个中
PDOStatement对象/预处理
- 引入配置文件,连接数据库,设置字符集,并抛出异常
// 引入mysqli配置文件
require "config.php";
// 连接数据库
try {
////数据库连接,得到一个PDO对象
$pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
// var_dump($pdo);
//捕捉特定于数据库信息的PDOEXCEPTION 异常
} catch(PDOException $e) {
echo $e->getMessage();
//捕捉拥有Throwable接口的错误或者其他异常
} catch (Throwable $e) {
echo $e->getMessage();
}
- 定义sql语句使用命名参数占位符定义预处理sql语句
// 使用命名参数占位符定义预处理sql语句
$sql = "select * from stu where age=:age";
-定义sql语句使用?占位符定义预处理sql语句
// 使用?占位符定义预处理sql语句
$sql = "select * from stu where age=?";
- prepare() — 准备要执行的语句,并返回语句对象
例:
$stmt = $pdo->prepare($sql);
- 绑定参数方法 1[PDOStatement::bindParam — 绑定一个参数到指定的变量名]
例:
// 使用PDOStatement::bindParam给一个使用?占位符的sql语句绑定值
$sql = "SELECT * FROM `STU` WHERE AGE=?";
$age = 12;
$stmt->bindParam(1,$age);
// 使用PDOStatement::bindParam给一个使用命名参数占位符的sql语句绑定值
$sql = "SELECT * FROM `STU` WHERE AGE=:age";
$age = 12;
$stmt->bindParam(":age",$age);
- 绑定参数方法 2[PDOStatement::bindValue — 把一个值绑定到一个参数]
// 使用PDOStatement::bindValue给一个使用?占位符的sql语句绑定值
例:
$age = 12;
4naem = '张三';
$stmt->bindValue(1,$age);
$stmt->bindValue(2,$name);
// 使用PDOStatement::bindValue给一个使用命名参数占位符的sql语句绑定值
例:
$sql = "SELECT * FROM `STU` WHERE `AGE`=:age AND `NAME`=:name";
$age = 12;
4naem = '张三';
$stmt->bindValue(":age",$age);
$stmt->bindValue(":name",$name);
- 执行预处理sql语句[PDOStatement::execute — 执行一条预处理语句]
例:
$stmt->execute();
- 绑定参数 bindParam()与bindValue();的区别
区别1: PDOStatement::bindValue — 把一个值绑定到一个参数,PDOStatement::bindParam — 绑定一个参数到指定的变量名
区别2: PDOStatement::bindParam()的第二个参数是按引用传递,所以只能提供变量作为参数,只有PDOStatement::execute()被执行的时候才取其值。
PDOStatement::bindValue()为占位符参数绑定值,只要绑定成功,就不会再变了。
- PDO预处理中常用的方法
// PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
// PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
// PDOStatement::fetch — 从结果集中获取下一行
// PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
// PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数
使用PDO操作数据库遍历出数据表中的数据
- 数据库配置文件
<?php
// 定义连接数据库的常量
define('DB_HOST','localhost'); // 主机名
define('DB_USER','root'); // 用户名
define('DB_PWD', 'root'); // 密码
define('DB_NAME', 'test'); // 数据库名
define('DB_PORT', '3306'); //端口号
define('DB_TYPE', 'mysql'); // 数据库类型
define('DB_CHARSET', 'utf8'); // 字符集
define('DB_DSN',DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);
// 得二种源数据方式
// $dsn = 'mysql:host=localhost;dbname=test';
// echo $dsn;
?>
- PDO操作数据遍历数据文件
<?php
// 使用pdo遍历数据表中的数据
// 引入数据库配置文件
require "./config.php";
// 连接数据库
try {
$pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
// 抛出pdo连接数据库的错误
} catch (PDOException $e) {
$e->getMessage();
//捕捉拥有Throwable接口的错误或者其他异常
} catch (Throwable $e) {
echo $e->getMessage();
}
// 使用命名参数方法定义预处理sql语句
$sql = "SELECT * FROM `stu` WHERE id>:id";
// 准备sql语句
$stmt = $pdo->prepare($sql);
// 使用PDOStatement::bindParam绑定参数
$id = 1;
$stmt->bindParam(":id",$id);
// 执行预处理sql语句判断是否成功
if ($stmt->execute()) {
echo "<table border='1' width='300px' align='center' >";
echo "<tr align='center'>";
echo "<td>ID</td>";
echo "<td>姓名</td>";
echo "<td>年龄</td>";
echo "</tr>";
// 循环数据
foreach ($stmt->fetchall() as $v) {
echo "<tr align='center'>";
echo "<td>{$v['id']}</td>";
echo "<td>{$v['name']}</td>";
echo "<td>{$v['age']}</td>";
echo "</tr>";
}
echo "</table>";
}
?>
- 遍历输出结果