数据库配置文件
<?php
//创建命名空间
namespace db;
// 隐式返回
return
[
// 创建数组记录账户和密码
'type' => $type ?? 'mysql',
// 数据库默认主机
'host' => $host?? 'localhost',
// 默认数据库
'dbname'=> $dbname ?? 'wxf',
// 默认字符编码集
'charset'=> $charset ?? 'utf8',
// 默认端口号
'port'=> $port ?? '3306',
// 默认的用户名
'username'=> $username ?? 'root',
// 默认的用户密码
'password'=> $password ?? '123456',
];
数据库链接文件
<?php
// 连接数据库
//命名空间
namespace ljdb;
//继承自带规则
use Exception;
use PDO;
// 加载配置参数 并保存到变量
$config = require 'config/db.php';
// $dsn = 'mysql:host=localhost;dbname=phpedu;charset=utf8;port=3306';
// 将连接文件里面的数组信息对应保存到变量
$type = $config['type'];
$host = $config['host'];
$dbname = $config['dbname'];
$username = $config['username'];
$password = $config['password'];
// 创建DSN 格式化 三要素这里只传了1个 账户和密码没传
$dsn = sprintf('%s:host=%s;dbname=%s', $type,$host,$dbname);
try {
// 连接数据库 这里将三要素全部传进来
$pdo = new PDO($dsn, $username, $password);
// var_dump($pdo);
} catch (Exception $e) {
die($e->getMessage());
}
单条查询与多条查询
<?php
// 数据表查询: 单条查询
namespace dtc;
use PDO;
// 1. 连接数据库 ..代表返回上层
require '..\ljdb.php';
// 2. 操作数据表(CURD)
// $sql = 'SELECT字段列表 FROM数据表名称 WHERE 查询条件 '
// `id`,`name`查询筛选的 *查询所有 这里把查询条件去掉了
$sql = 'SELECT * FROM `grxx` ';
// 预处理对象$stmt:为了防止 SQL注入
$stmt = $pdo->prepare($sql);
// 使用预处理对象调用 execute()执行这条sql语句
$stmt->execute();
// 使用:debugDumpParams()调试/查看
// var_dump($stmt->debugDumpParams());
// 获取表中一条记录
$staff = $stmt->fetch(PDO::FETCH_ASSOC);
printf('<pre>%s</pre>',print_r($staff,true));
//单独获取姓名并保存到变量
$xingming = $staff['xm'];
$dh = $staff['dh'];
// 打印姓名
echo '姓名: ' . $xingming . ' ';
echo '电话: ' . $dh;
// 3. 关闭连接[可选]
// $pdo = null;
unset($pdo);
//多条查询
// 数据表查询: 多条查询
namespace dtc;
use PDO;
// 1. 连接数据库 ..代表返回上层
require '..\ljdb.php';
// 2. 操作数据表(CURD)
// $sql = 'SELECT字段列表 FROM数据表名称 WHERE 查询条件 '
// `id`,`name`查询筛选的 *查询所有 这里把查询条件去掉了
$sql = 'SELECT * FROM `grxx` ';
// 预处理对象$stmt:为了防止 SQL注入
$stmt = $pdo->prepare($sql);
// 使用预处理对象调用 execute()执行这条sql语句
$stmt->execute();
// 获取表中一条记录
$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 使用printf批量打印
foreach ($staffs as $staff) {
printf('id:%s 姓名:%s 电话:%s 地址:%s<br>', $staff['id'], $staff['xm'], $staff['dh'],$staff['dz']);
}
// 3. 关闭连接[可选]
// $pdo = null;
unset($pdo);
数据库更新操作
<?php
// 数据表更新记录
namespace dtc;
use PDO;
// 1. 连接数据库 ..代表返回上层
require '..\ljdb.php';
// 2. 操作数据表(CURD)
// $sql = "UPDATE 表名 SET 字段=新值 WHERE 更新条件"
$sql = "UPDATE `grxx` SET `xm` = ? WHERE `id`=?";
$stmt = $pdo->prepare($sql);
$stmt->execute(['小小飞', 2]);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '更新成功';
} else {
echo '没有记录被更新';
print_r($stmt->errorInfo());
}
// 3. 关闭连接[可选]
unset($pdo);
数据库新增操作
<?php
// 数据表新增记录
namespace dtc;
use PDO;
// 1. 连接数据库 ..代表返回上层
require '..\ljdb.php';
// 2. 操作数据表(CURD)
// $sql = 'INSERT 表名 SET name=?, age=?,.... ';
$sql = "INSERT `grxx` SET `xm`= ? , `dh`=?, `dz`=?";
$stmt = $pdo->prepare($sql);
$data = ['新增小飞', 15666886688, '新增小飞的地址'];
$stmt->execute($data);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '新增成功, 新增记录的主键是: ' . $pdo->lastInsertId();
} else {
echo '新增失败';
print_r($stmt->errorInfo());
}
// 3. 关闭连接[可选]
unset($pdo);
数据库删除操作
<?php
// 数据表删除记录
namespace dtc;
use PDO;
// 1. 连接数据库 ..代表返回上层
require '..\ljdb.php';
// 2. 操作数据表(CURD)
// $sql = "DELETE FROM 表名 WHERE 删除条件"
$sql = "DELETE FROM `grxx` WHERE `id`=:id";
$stmt = $pdo->prepare($sql);
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$stmt->execute(['id'=>$_GET['id']]);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '删除成功';
}
// 3. 关闭连接[可选]
unset($pdo);
总结:感觉pdo比mysqli好懂一些。