1.插入数据
1.1 匿名参数+索引数组+值绑定
<?php
namespace pdo;
use PDO;
/**
* 连接数据库
* 参数1:数据库连接字符串 数据库驱动、服务器地址、数据库名称、端口号、字符编码
* 参数2:数据库用户
* 参数3:数据库密码
* 匿名参数+索引数组+值绑定
*/
$db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
// 创建sql语句 使用匿名参数
$sql = "INSERT `user` SET `name`=?,`sex`=?,`email`=?;";
// 创建PDOStatement对象
$stmt =$db->prepare($sql);
// 索引数组 使用list解构
list($name,$sex,$email) = ['崔瀺',0,'cuichan@qq.com'];
// 值绑定 解决数组传参时,execute()默认参数是字符串类型
// 通过bindValue()值绑定强制转换
// 参数1:数组索引+1 参数2: 传入的数据变量 参数3:数据类型
$stmt->bindValue(1, $name,PDO::PARAM_STR);
$stmt->bindValue(2, $sex,PDO::PARAM_INT);
$stmt->bindValue(3, $email,PDO::PARAM_STR);
// 执行sql
if ($stmt->execute()) {
if ($stmt->rowCount() > 0) {
echo '成功的添加了 '.$stmt->rowCount() . '条记录~~, id为: '. $db->lastInsertId();
} else {
// 主要用于检测是否重复执行
echo '没有添加成功';
print_r($stmt->errorInfo());
}
} else {
echo 'sql执行失败';
print_r($stmt->errorInfo());
}
// 关闭数据库
unset($db);
1.2 命名参数+关联数组+引用绑定
<?php
namespace pdo;
use PDO;
// 连接数据库
// 命名参数+关联数组+引用绑定
$db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
// 创建sql语句 使用命名参数
$sql = "INSERT `user` SET `name`=:name,`sex`=:sex,`email`=:email;";
// 创建PDOStatement对象
$stmt = $db->prepare($sql);
// bindParam()引用绑定
// 参数1:键名 参数2: 传入的数据变量 参数3:数据类型
$stmt->bindParam('name', $name, PDO::PARAM_STR);
$stmt->bindParam('sex', $sex, PDO::PARAM_INT);
$stmt->bindParam('email', $email, PDO::PARAM_STR);
// 准备多条数据 关联数组
$data = [
['name' => '刘十六', 'sex' => 0, 'email' => 'liushiliu@qq.com'],
['name' => '左右', 'sex' => 0, 'email' => 'zuoyou@qq.com'],
['name' => '齐静春', 'sex' => 0, 'email' => 'qijingchun@qq.com'],
['name' => '陈平安', 'sex' => 0, 'email' => 'chenpingan@qq.com']
];
// 多条数据添加 关联数组解构
foreach ($data as list('name' => $name, 'sex' => $sex, 'email' => $email)) {
// 执行sql
$stmt->execute();
echo '添加成功, id = ' . $db->lastInsertId() . '<br>';
}
// 关闭数据库
unset($db);
2.更新数据
<?php
namespace pdo;
use PDO;
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
// 更新操作 当sql语句过多时,可以用 heredoc 句法结构 来写sql
// 匿名参数
$sql = <<< SQL
UPDATE `user`
SET `name`= ?,`sex`= ?,`email`= ?
WHERE `id` = ? ;
SQL;
// 特别提示:绝对禁止"无条件更新"
// 检测一下sql语句中, 是否存在 where 子句
// strpos, stripos:忽略大小写
if (stripos($sql, 'where')===false) {
exit('禁止无条件更新');
}
// 创建PDOStatement对象
$stmt = $db->prepare($sql);
// 索引数组方式传参 修改id=2的数据
$data = ['宁姚', 1, 'ningyao@qq.com', 2];
// 执行sql
if ($stmt->execute($data)) {
// $stmt->rowCount():返回受影响的行数,大于0则sql执行成功,反之执行失败
if ($stmt->rowCount() > 0) {
echo '成功的更新了 '.$stmt->rowCount() . '条记录~~';
} else {
// 主要用于检测是否重复执行
echo '没有记录被更新';
print_r($stmt->errorInfo());
}
} else {
echo 'sql执行失败';
// 打印失败信息
print_r($stmt->errorInfo());
}
// 关闭数据库
unset($db);
3.删除数据
<?php
namespace pdo;
use PDO;
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
// 删除操作
// 匿名参数
$sql = "DELETE FROM `user` WHERE `id` = ?;";
// 特别提示:绝对禁止"无条件删除"
// 检测一下sql语句中, 是否存在 where 子句
// strpos, stripos: 忽略大小写
if (stripos($sql, 'where') === false) {
exit('禁止无条件删除');
}
// 创建PDOStatement对象
$stmt = $db->prepare($sql);
// 执行sql 删除ID=7的数据
if ($stmt->execute([7])) {
// $stmt->rowCount():返回受影响的行数,大于0则sql执行成功,反之执行失败
if ($stmt->rowCount() > 0) {
echo '成功的删除了 ' . $stmt->rowCount() . '条记录~~';
} else {
// 主要用于检测是否重复执行
echo '没有记录被删除';
print_r($stmt->errorInfo());
}
} else {
echo 'sql执行失败';
// 打印失败信息
print_r($stmt->errorInfo());
}
// 关闭数据库
unset($db);
4.查询操作
4.1 逐条查询 fetch() + while()
<?php
namespace pdo;
use PDO;
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
// 查询?条数据 返回字段有id、name、email,没有sex字段
$sql = 'SELECT `id`,`name`,`email` FROM `user`LIMIT ?';
// 创建PDOStatement对象
$stmt = $db->prepare($sql);
// 值绑定 转为int类型 查询前5条数据
$stmt->bindValue(1, 5, PDO::PARAM_INT);
// 执行sql
if ($stmt->execute()) {
// fetch()逐条查询
// PDO::FETCH_ASSOC 过滤索引数组,保留关联数组
while ($staff = $stmt->fetch(PDO::FETCH_ASSOC)) {
// 格式化打印输出
printf('<pre>%s</pre>', print_r($staff, true));
}
} else {
echo 'sql执行失败';
print_r($stmt->errorInfo());
}
// 关闭数据库
unset($db);
4.2 查询所有 fetchAll() + foreach()
<?php
namespace pdo;
use PDO;
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=phpedu;port:3306;charset=utf8', 'root', 'root');
// 返回字段有id、name、email,没有sex字段
$sql = 'SELECT `id`,`name`,`email` FROM `user` WHERE id>?;';
// 创建PDOStatement对象
$stmt = $db->prepare($sql);
// 值绑定 转为int类型 查询id大于2的所有数据
$stmt->bindValue(1, 2, PDO::PARAM_INT);
// 执行sql
if ($stmt->execute()) {
// fetchAll(): 获取全部满足条件的记录
// PDO::FETCH_ASSOC 过滤索引数组,保留关联数组
$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($staffs as $staff) {
// 格式化打印输出
printf('<pre>%s</pre>', print_r($staff, true));
}
} else {
echo 'sql执行失败';
print_r($stmt->errorInfo());
}
// 关闭数据库
unset($db);