PDO 增删改查操作
1.配置数据库的基本参数
<?php
namespace pdo_edu;
// 数据库连接配置参数
return [
// 数据库的类型
'type' => $type ?? 'mysql',
// 数据库默认主机
'host' => $host?? 'localhost',
// 默认数据库
'dbname'=> $dbname ?? 'phpedu',
// 默认字符编码集
'charset'=> $charset ?? 'utf8',
// 默认端口号
'port'=> $port ?? '3306',
// 默认的用户名
'username'=> $username ?? 'root',
// 默认的用户密码
'password'=> $password ?? 'root',
];
2.pdo数据库连接
<?php
//连接数据库
namespace pdo_edu;
use Exception;
use PDO;
// 加载配置参数
$config = require 'config/database.php';
// PDO: PHP Data Object, php数据对象
// pdo可以让php对所有类型的数据库, 提供了一个统一的,轻量级的访问接口
// PDO连接数据库三要素, 三个重要参数,
// 数据源: DSN
// 用户名: username
// 用户密码: password
// DSN: 数据库类型:host=数据库的主机地址;dbname=默认的数据库名称;chart=... ;port= ...
// $dsn = 'mysql:host=localhost;dbname=phpedu;charset=utf8;port=3306';
extract($config);
// $dsn = "$type:host=$host;dbname=$dbname";
$dsn = sprintf('%s:host=%s;dbname=%s',$type,$host,$dbname);
// echo $dsn;
try {
// 连接数据库
$pdo = new PDO($dsn,$username,$password);
}catch(Exception $e){
die($e->getMessage());
}
3.pdo数据库查询
$sql="SELECT 字段列表 FROM 表名 WHERE 查询条件 "
<?php
// 数据表查询
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据表(CURD)
// $sql = 'SELECT 字段列表 FROM 数据表名称 WHERE 查询条件 '
$sql = 'SELECT `id`,`name`,`price` FROM `goods` WHERE `price` > 1';
// 预处理对象$stmt:为了防止 SQL注入
$stmt = $pdo->prepare($sql);
// 预处理对象$stmt , 就是SQL语句对象
// 使用预处理对象调用 execute()执行这条sql语句
$stmt->execute();
// 使用:debugDumpParams()调试/查看
// var_dump($stmt->debugDumpParams());
// 获取表中一条记录
// $staff = $stmt->fetch(PDO::FETCH_ASSOC);
// printf('<pre>%s</pre>',print_r($staff,true));
// $staff = $stmt->fetch(PDO::FETCH_ASSOC);
// printf('<pre>%s</pre>',print_r($staff,true));
// $staff = $stmt->fetch(PDO::FETCH_ASSOC);
// printf('<pre>%s</pre>',print_r($staff,true));
// 如果再也没有满足条件的记录, 会返回false
//多条查询
$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
// print_r($staffs);
foreach ($staffs as $staff) {
$date = date('Y年m月d日', $staff['add_time']);
printf('id=%s:商品名字=%s---价格=%s---创建时间=%s<br>', $staff['id'], $staff['name'], $staff['price'], $date);
}
// 单条查询
while ($staff = $stmt->fetch(PDO::FETCH_ASSOC)) {
printf('<pre>%s</pre>',print_r($staff,true));
}
// 3. 关闭连接[可选]
// $pdo = null;
unset($pdo);
4.pdo数据库添加
$sql = "INSERT 表名 SET name=?,age=?";
$sql = "INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);"
<?php
// 数据表新增记录
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据表(CURD)
// $sql = 'INSERT 表名 SET name=?, age=?,.... ';
$sql = "INSERT `goods` SET `name`= ? , `num`=?, `price`=?, `hot`=?,`add_time`=?";
$stmt = $pdo->prepare($sql);
$data = ['香蕉', 3,20, 0, 1579244075];
$stmt->execute($data);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '新增成功, 新增记录的主键是: ' . $pdo->lastInsertId();
} else {
echo '新增失败';
print_r($stmt->errorInfo());
}
// 3. 关闭连接[可选]
unset($pdo);
5.pdo数据库更新
$sql="UPDATE 表名 SET 字段=新的值 WHERE 更新条件 "
<?php
// 数据表更新记录
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据表(CURD)
// $sql = "UPDATE 表名 SET 字段=新值 WHERE 更新条件"
$sql = "UPDATE `goods` SET `name` = ? WHERE `id`=?";
$stmt = $pdo->prepare($sql);
$stmt->execute(['苹果', 6]);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '更新成功';
} else {
echo '没有记录被更新';
print_r($stmt->errorInfo());
}
// 3. 关闭连接[可选]
unset($pdo);
6.pdo数据库删除
$sql="DELETE FROM 表名 WHERE 删除条件 "
<?php
// 数据表删除记录
namespace pdo_edu;
use PDO;
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据表(CURD)
// $sql = "DELETE FROM 表名 WHERE 删除条件"
$sql = "DELETE FROM `goods` WHERE `id`=:id";
$stmt = $pdo->prepare($sql);
//使用过滤器,仅允许int类型
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$stmt->execute(['id'=>$_GET['id']]);
// 判断是否执行成功
// $stmt->rowCount(): 返回写操作产生的受影响的记录数量
if ($stmt->rowCount() === 1) {
echo '删除成功';
}
// 3. 关闭连接[可选]
unset($pdo);