PDO(数据访问抽象层,统一各种数据库访问方法)
1.先写一个数据库的配置文件,方便数据库连接和数据库和数据库的修改(定义常量)
<?php
// 数据库的型号
define('DB_TYPE', 'mysql');
// 数据库主机名
define('DB_HOST', 'localhost');
// 数据库用户名
define('DB_USER', 'root');
// 数据库密码
define('DB_PSD', 'root');
// 数据库名称
define('DB_NAME', 'user');
// 数据库端口号
define('DB_PORT', 3306);
// 数据库的编码集
define('DB_CHARSET', 'utf8');
// 定义pdo中dsn的主机名,数据库型号,数据库名和编码方式
define('DB_DSN', DB_TYPE . ":host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET);
2.连接数据库并进行增,删,改,查操作
<?php
// 引用数据库配置文件
require "config.php";
try {
// 使用pdo进行数据库连接
$pdo = new PDO(DB_DSN, DB_USER, DB_PSD);
} catch (PDOException $a) {
// 捕捉pdo连接数据库错误
echo $a->getMessage();
}
// 更新数据
$sql = "UPDATE `apple` SET `username`='小喜', `sex`='女' WHERE `username`='小马'";
// 插入数据
$sql1 = "INSERT INTO apple(`username`,`password`,`sex`) VALUES('小哈',sha1(777777),'男')";
// 删除数据
$sql2 = "DELETE FROM `apple` WHERE `id`=16";
// 执行sql语句
// exec()执行UPDATE,INSECT,DELETEsql语句并返回受影响的行数
var_dump($pdo->exec($sql));
echo '<br>';
var_dump($pdo->exec($sql1));
echo '<br>';
var_dump($pdo->exec($sql2));
<?php
$sql = " SELECT *FROM `apple` WHERE `id`>10";
// 用qurey()执行sql语句会以statement对象形式返回结果集
$stmt = $pdo->query($sql);
// 循环遍历对象
echo '<table border=1>';
echo '<tr>';
echo '<td>' . 'id' . '</td>';
echo '<td>' . '用户名' . '</td>';
echo '<td>' . '密码' . '</td>';
echo '<td>' . '性别' . '</td>';
echo '</tr>';
foreach ($stmt as $v) {
echo '<tr>';
echo '<td>' . $v['id'] . '</td>';
echo '<td>' . $v['username'] . '</td>';
echo '<td>' . $v['password'] . '</td>';
echo '<td>' . $v['sex'] . '</td>';
echo '</tr>';
}
echo '</table>';
预处理机制
1.使用?参数占位符或者命名参数占位符后绑定值到变量中
<?php
// 准备sql语句(使用?参数占位符)
$sql = "SELECT * FROM `apple` WHERE `id`=?";
// 准备执行sql语句
$stmt = $pdo->prepare($sql);
$id = 5;
// 绑定参数到变量中
$stmt->bindParam(1, $id);
// 执行预处理语句
$stmt->execute();
// 查看受影响的行数
echo $stmt->rowCount();
foreach ($stmt as $v) {
var_dump($v);
}
// 准备sql语句(使用命名参数占位符)
$sql = "SELECT * FROM `apple` WHERE `id`=:id";
// 准备执行sql语句
$stmt = $pdo->prepare($sql);
$id = 5;
// 绑定参数到变量中
$stmt->bindParam(':id', $id);
// 执行预处理语句
$stmt->execute();
// 查看受影响的行数
echo $stmt->rowCount();
‘?’参数占位符
命名参数占位符
<?php
// 把一个值绑定到参数中
// 准备sql语句(也可以用命名参数占位符)
$sql = "SELECT * FROM `apple` WHERE `id`=?";
// 准备执行sql语句
$stmt = $pdo->prepare($sql);
// 绑定值到参数中
$stmt->bindValue(1, 5);
// 执行预处理语句
$stmt->execute();
// 查看受影响的行数
echo $stmt->rowCount();
// 使用fetch返回结果中的第一个数据
echo '<pre>' . print_r(($stmt->fetch(PDO::FETCH_ASSOC)), true) . '</pre><hr>';
// 使用fetchAll()获取结果集
echo '<pre>' . print_r(($stmt->fetchAll(PDO::FETCH_ASSOC)), true) . '</pre>';
// 返回跟数据库句柄上一次操作相关的一个5位数组成SQLSTATE码
var_dump($stmt->errorCode());
echo '<hr>';
// 返回跟数据库句柄上一次操作相关的一个信息数组
var_dump($stmt->errorInfo());
把值绑定到参数
fetch()获取结果集中的第一条数据
fetchAll()获取结果集中的全部数据
捕捉错误信息
遍历数据
<?php
$sql = "SELECT * FROM `apple` WHERE `id`>?";
// 准备执行sql语句
$stmt = $pdo->prepare($sql);
// 绑定值到参数中
$stmt->bindValue(1, 4);
// 执行预处理语句
$stmt->execute();
// 使用fetch_all()获取结果集
$a = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 遍历数组
echo <<<TAB
<table border=1 align=center>
<tr>
<td>id</td>
<td>姓名</td>
<td>密码</td>
<td>性别</td>
</tr>
TAB;
foreach ($a as $k => $v) {
echo <<<TA
<tr>
<td>{$v['id']}</td>
<td>{$v['username']}</td>
<td>{$v['password']}</td>
<td>{$v['sex']}</td>
</tr>
TA;
}
echo '</table>';
总结
1.了解了PDO的一些基础操作
2.需要多敲代码形成记忆(做作业时很容易忘记代码的书写)
3.PDO还有很多方法需要自行去了解和尝试