1. 实例演示数据库的CURD操作
<?php
namespace pdo_edu;
use PDO;
// 1.连接数据库
//DNS:数据库配置参数,类型、主机名、数据库名、端口号、默认字符集
$username = 'root';
$password = 'root';
$dsn = 'mysql:host=127.0.0.1;dbname=statt;port=3306;charset=utf8';
$db = new PDO($dsn,$username,$password);
//设置查询数据只获取关联数组
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
// var_dump($db);
// 2.增删改查:CURD
/**
* PDO预处理:1.防止sql注入。2.数据延迟绑定
* (编程时只写sql模板,执行sql语句在给占位符绑定真实数据)
* 预处理过程:
* 1.创建语句模板对象:数据用占位符表示
* 2.执行sql语句,根据操作类型(写/读),读返回结果集/数组,写返回受影响的记录数量
* '?'匿名占位符; 'string'命名占位符
*/
//INSERT插入
//INSERT 表名 set 字段=值
// 1.关键字全大写
// 2.表名字段名使用反引号作为定界符
$sql = 'INSERT `user` SET `name` = ?, `sex` = ?, `email` = ?';
// print($sql);
//1.创建sql语句模板对象
$statt = $db->prepare($sql);
//2.执行sql语句
//成功
$statt->execute(['洪七公',0,'gongqigong@php.cn']);
$statt->execute(['小龙女',1,'xiaolongnv@php.cn']);
$statt->execute(['李莫愁',1,'limochou@php.cn']);
if($statt->rowCount()>0){
echo '新增成功,ID=' . $db->lastInsertId();
}else{
echo '新增失败';
print_r($statt->errorInfo());
}
if($statt->execute(['杨过',0,'yangguo@php.cn'])){
}else{
//失败
echo '执行失败';
print_r($statt->errorInfo());
}
//UPDATE更新操作
$sql = 'UPDATE `user` SET `name` = ? WHERE `id` = ?';
$statt = $db->prepare($sql);
$statt->execute(['小龙女22',3]);
if($statt->rowCount()>0){
echo '更新成功';
}else{
echo '更新失败';
print_r($statt->errorInfo());
}
//DELETE删除操作
$sql = 'DELETE FROM `user` WHERE `id` = ?';
$statt = $db->prepare($sql);
$statt->execute([3]);
if($statt->rowCount()>0){
echo '删除成功';
}else{
echo '删除失败';
print_r($statt->errorInfo());
}
//SELECT 查询操作
$sql = 'SELECT * FROM `user`';
$statt = $db->prepare($sql);
$statt->execute();
//单条查询fetch
// $staff = $statt->fetch();
// printf('<pre>%s</pre>',print_r($staff,true));
//多条查询fetchAll
$staff = $statt->fetchAll();
printf('<pre>%s</pre>',print_r($staff,true));
描述PDO的本质与原理是什么?为什么要用预处理?
PDO预处理:1.防止sql注入。2.数据延迟绑定
(编程时只写sql模板,执行sql语句在给占位符绑定真实数据)
预处理过程:
1.创建语句模板对象:数据用占位符表示
2.执行sql语句,根据操作类型(写/读),读返回结果集/数组,写返回受影响的记录数量
'?'匿名占位符; 'string'命名占位符