PDO是PHP数据对象(PHP Data Object)的缩写。
PDO有非常多的操作却是MySQLi扩展库所不具备的优势:
- PDO 支持12中数据驱动和参数绑定,而 MySQLi 只支持 mysql。
- PDO 支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的。
- PDO 是PHP官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级。
- PDO 预处理可以防止SQL注入,确保数据库更加安全。
PDO数据库的连接
<?php
$db = [
'type'=>'mysql',
'host'=>'demo.com',
'dbname'=>'demo',
'username'=>'root',
'password'=>'root',
];
//$dsn = 'mysql:host=demo.com;dbname=demo';
$dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']}";
try{
$pdo = new PDO($dsn, $db['username'],$db['password']);
}catch (PDOException $e){
die('数据库连接失败:'.$e->getMessage());
}
新增
$sql = 'INSERT INTO `student` (`name`,`age`,`course`) VALUES (?, ?, ?)';
$stmt = $pdo->prepare($sql);
$name = '唐僧';
$age = 28;
$course = '英语';
$stmt->bindParam(1,$name);
$stmt->bindParam(2,$age);
$stmt->bindParam(3,$course);
$result = $stmt->execute();
if ($result){
echo '成功插入'.$stmt->rowCount().'条数据,新增ID为:'.$pdo->lastInsertId();
}else{
die('数据添加失败'.print_r($stmt->errorInfo(),true));
}
$pdo = null;
更新
$sql = 'UPDATE `student` SET `name` = ?, age= ?, course = ? WHERE id = ?';
$stmt = $pdo->prepare($sql);
$name = '观音';
$age = 26;
$course = '语文';
$id = 2;
$stmt->bindParam(1,$name);
$stmt->bindParam(2,$age);
$stmt->bindParam(3,$course);
$stmt->bindParam(4,$id);
$result = $stmt->execute();
if ($result){
echo '成功更新'.$stmt->rowCount().'条数据';
}else{
die('数据更新失败'.print_r($stmt->errorInfo(),true));
}
$pdo = null;
删除
占位符的另一种用法 :id
,绑定数据的时候使用bindParam('id', 参数变量)
$sql = 'DELETE FROM `student` WHERE id = :id ';
$stmt = $pdo->prepare($sql);
$id = 2;
$stmt->bindParam('id',$id);
$result = $stmt->execute();
if ($result){
echo '成功删除'.$stmt->rowCount().'条数据';
}else{
die('数据删除失败'.print_r($stmt->errorInfo(),true));
}
$pdo = null;
查询
- 无条件查询:
使用 query() 执行 sql语句
,返回PDOStament对象,结果集不用解析,可以直接遍历循环。
$sql = 'SELECT * FROM `student`';
$result = $pdo->query($sql);
if ($result->rowCount() > 0){
$result->setFetchMode(PDO::FETCH_ASSOC);
foreach ($result as $row){
echo $row['name'].'---'.$row['age'].'---'.$row['course'];
}
}else{
die('查询失败'.print_r($pdo->errorInfo(),true));
}
$pdo = null;
- 有条件查询:
使用 execute() 执行 mysql语句
$sql = 'SELECT * FROM `student2` WHERE id = :id ';
$stmt = $pdo->prepare($sql);
$id = 10;
$stmt->bindParam('id',$id);
$result = $stmt->execute();
if ($result){
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmt->fetch()){
echo $row['name'].'---'.$row['age'].'---'.$row['course'];
}
}else{
die('数据获取失败'.print_r($stmt->errorInfo(),true));
}
$pdo = null;
THE END !