Blogger Information
Blog 94
fans 0
comment 0
visits 92758
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
【PHP】PDO常用的CURD操作
可乐随笔
Original
1823 people have browsed it

PDO常用的CURD操作

1.数据库配置文件,示例

  1. <?php
  2. // database.php
  3. // 数据库连接默认参数
  4. return [
  5. // 数据库的类型
  6. 'type' => 'mysql',
  7. // 数据库默认主机
  8. 'host' => 'localhost',
  9. // 默认数据库
  10. 'dbname' => 'dbname',
  11. // 默认的用户名
  12. 'username' => 'username',
  13. // 默认的用户密码
  14. 'password' => 'username',
  15. // 默认端口号
  16. 'port' => '3306',
  17. // 默认字符编码集
  18. 'charset' => 'utf8',
  19. ];

2.数据库连接文件,示例

2.1 获取配置项
2.2 自定义数据库配置
2.3 用自定义数组替换获取的配置项
$config = array_merge($config, $custom);
2.4 解析配置项(将配置项中的数组值解析到变量)
['username'=>$username,'password'=>$password] = $config;
2.5 创建数据源DSN(连接语句对象化)
2.6 创建PDO实例(连接数据库,在此时进行传参)

  1. <?php
  2. // 连接数据库
  3. // 1. 获取配置项
  4. $config = require __DIR__ . '/database.php';
  5. // print_r($config);
  6. // 自定义配置
  7. $custom = [
  8. // 数据库默认主机
  9. 'host' => 'localhost',
  10. // 默认数据库
  11. 'dbname' => 'phpedu',
  12. // 默认的用户名
  13. 'username' => 'root',
  14. // 默认的用户密码
  15. 'password' => 'root',
  16. ];
  17. // 数组替换更新
  18. $config = array_merge($config, $custom);
  19. // print_r($config);
  20. // 2. 解析配置项
  21. // ['id'=>$id, 'name'=>$name]=['id'=>1,'name'=>'a'];
  22. ['type'=>$type,'host'=>$host,'dbname'=>$dbname] = $config;
  23. ['username'=>$username,'password'=>$password] = $config;
  24. ['port'=>$port,'charset'=>$charset] = $config;
  25. // echo $type, $username, $charset;
  26. // extract($config);
  27. // 3. 创建数据源DSN
  28. // echo vsprintf('%s,%s,%s', ['php','cn','zhu']);
  29. $tmpl = '%s:host=%s;dbname=%s;port=%s;charset=%s';
  30. $params = [$type,$host,$dbname,$port,$charset];
  31. $dsn = vsprintf($tmpl, $params);
  32. // echo $dsn;
  33. // 4. 创建PDO实例(连接数据库)
  34. try {
  35. $db = new PDO($dsn, $username, $password);
  36. // if ($db) {
  37. // echo '连接成功';
  38. // }
  39. // var_dump($db);
  40. // 设置结果集的获取模式: 仅返回关联部分
  41. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  42. } catch (PDOException $e) {
  43. die('连接失败' . $e->getMessage());
  44. }

3. 连接数据库实例(单一文件)

  1. <?php
  2. // 快速预览
  3. // 1.连接数据库
  4. $db = new PDO('mysql:dbname=phpedu','root','root');
  5. // 2.执行SQL
  6. $stmt = $db->prepare('select id,name,email from user limit 1');
  7. $stmt ->execute();
  8. print_r($stmt->fetch(PDO::FETCH_ASSOC));
  9. // 3.关闭连接
  10. unset($db);

简化版

  1. <?php
  2. // ? 连接数据库
  3. // 1. 连接数据库: PDO类实例
  4. $username = 'root';
  5. $password = 'root';
  6. $dsn = 'mysql:dbname=phpedu';
  7. try {
  8. $db = new PDO($dsn, $username, $password);
  9. if ($db) {
  10. echo '连接成功';
  11. }
  12. } catch (PDOException $e) {
  13. die('连接失败' . $e->getMessage());
  14. }

4.数据库操作之:新增(Insert)(命名占位符)

  1. <?php
  2. // ? 新增: INSERT-1
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. // sql: 预处理,sql中的数据使用占位符(参数)
  7. // 参数有二种: (1) 命名占位符 ":email" (2) 匿名占位符: "?"
  8. $sql = 'INSERT user VALUES (null,:uname,:email,:password)';
  9. // ? 创建sql语句对象 PDOStatement的实例
  10. $stmt = $db->prepare($sql);
  11. // var_dump($stmt);
  12. // ? 将具体的值绑定到参数上
  13. $stmt->bindValue('uname', '老张');
  14. $stmt->bindValue('email', 'lz@qq.com');
  15. $stmt->bindValue('password', md5('123'));
  16. // 查看一下预处理sql语句
  17. // $stmt->debugDumpParams();
  18. // ? 执行sql
  19. if ($stmt->execute()) {
  20. // 成功
  21. echo '新增成功, 新记录的主键ID = ' . $db->lastInsertId();
  22. } else {
  23. echo '新增失败';
  24. print_r($stmt->errorInfo());
  25. }
  26. // 3. 关闭连接(可选)
  27. // unset($db);
  28. // $db = null;

4.数据库操作之:新增2(匿名占位符)

  1. <?php
  2. // ? 新增: INSERT-2
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. // sql: 预处理,sql中的数据使用占位符(参数)
  7. // 参数有二种: (1) 命名占位符 ":email" (2) 匿名占位符: "?"
  8. $sql = 'INSERT user VALUES (null,?,?,?)';
  9. // ? 创建sql语句对象 PDOStatement的实例
  10. $stmt = $db->prepare($sql);
  11. // ? 执行sql
  12. if ($stmt->execute(['小猪', 'xz@php.cn', md5('abc')])) {
  13. // 成功
  14. echo '新增成功, 新记录的主键ID = ' . $db->lastInsertId();
  15. } else {
  16. echo '新增失败';
  17. print_r($stmt->errorInfo());
  18. }
  19. // 3. 关闭连接(可选)
  20. // unset($db);
  21. // $db = null;

5. 数据库操作之:更新

  1. <?php
  2. // ? 更新: UPDATE
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'UPDATE user SET uname= ? WHERE id = ?';
  7. // $sql = 'UPDATE user SET uname= ?';
  8. // 检测sql语句中是否存在 where 条件?没有则禁止执行
  9. if (!stristr($sql, 'WHERE')) {
  10. die('禁止无条件更新');
  11. }
  12. // ? 创建sql语句对象
  13. $stmt = $db->prepare($sql);
  14. // ? 将某个变量绑定到参数上
  15. $stmt->bindParam(1, $uname);
  16. $stmt->bindParam(2, $id);
  17. $uname = '西门庆';
  18. $id = 4;
  19. // ? 执行sql
  20. if ($stmt->execute()) {
  21. // $stmt->debugDumpParams();
  22. // 更新成功有二种情况,1.数据变化了,2.数据没有发生变化
  23. // rowCount(): 返回受影响的记录数量(修改了)
  24. if ($stmt->rowCount() > 0) {
  25. echo '更新成功';
  26. } else {
  27. echo '没有记录被更新';
  28. }
  29. } else {
  30. // echo '更新失败';
  31. // print_r($stmt->errorInfo());
  32. die('更新失败: '. $stmt->errorInfo()[2]);
  33. }

6.数据库操作之:删除

  1. <?php
  2. // ? 删除: DELETE
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'DELETE FROM user WHERE id = ?';
  7. // $sql = 'DELETE FROM user';
  8. // 检测sql语句中是否存在 where 条件?没有则禁止执行
  9. if (!stristr($sql, 'WHERE')) {
  10. die('禁止无条件删除');
  11. }
  12. // ? 创建sql语句对象
  13. $stmt = $db->prepare($sql);
  14. // ? 执行sql
  15. if ($stmt->execute([4])) {
  16. if ($stmt->rowCount() > 0) {
  17. echo '删除成功';
  18. } else {
  19. echo '没有记录被删除';
  20. }
  21. } else {
  22. die('删除失败: '. $stmt->errorInfo()[2]);
  23. }

7.数据库操作之:查询1

  1. <?php
  2. // ? 查询: SELECT-1
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'SELECT id,uname,email FROM user WHERE id IN (?,?,?)';
  7. // ? 创建sql语句对象
  8. $stmt = $db->prepare($sql);
  9. // ? 执行sql
  10. if ($stmt->execute([2, 3, 6])) {
  11. // 查询成功,结果集解析到数组中
  12. // 1. 逐条: fetch + while
  13. // 2. 多条: fetchAll + foreach
  14. // print_r($stmt->fetch());
  15. // print_r($stmt->fetch());
  16. // print_r($stmt->fetch());
  17. // print_r($stmt->fetch(PDO::FETCH_ASSOC));
  18. // print_r($stmt->fetch(PDO::FETCH_NUM));
  19. // fetch + while
  20. while ($user = $stmt->fetch()) {
  21. print_r($user);
  22. }
  23. } else {
  24. die('查询失败: ' . $stmt->errorInfo()[2]);
  25. }

7.数据库操作之:查询2

  1. <?php
  2. // ? 查询: SELECT-1
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'SELECT id,uname,email FROM user WHERE id IN (?,?,?)';
  7. // ? 创建sql语句对象
  8. $stmt = $db->prepare($sql);
  9. // ? 执行sql
  10. if ($stmt->execute([2, 3, 6])) {
  11. // 查询成功,结果集解析到数组中
  12. // 1. 逐条: fetch + while
  13. // 2. 多条: fetchAll + foreach
  14. // print_r($stmt->fetch());
  15. // print_r($stmt->fetch());
  16. // print_r($stmt->fetch());
  17. // print_r($stmt->fetch(PDO::FETCH_ASSOC));
  18. // print_r($stmt->fetch(PDO::FETCH_NUM));
  19. // fetch + while
  20. while ($user = $stmt->fetch()) {
  21. print_r($user);
  22. }
  23. } else {
  24. die('查询失败: ' . $stmt->errorInfo()[2]);
  25. }

7.数据库操作之:查询3

  1. <?php
  2. // ? 查询: SELECT-3: 将列名绑定到变量上
  3. // 1. 连接数据库
  4. require __DIR__ . '/config/connect.php';
  5. // 2. 执行操作
  6. $sql = 'SELECT id,uname,email FROM user WHERE id IN (?,?,?)';
  7. // ? 创建sql语句对象
  8. $stmt = $db->prepare($sql);
  9. // ? 执行sql
  10. if ($stmt->execute([2,3,6])) {
  11. // 将每一列的值,绑定到指定变量上
  12. // 三个字段,三个变量
  13. // 字段的索引,1,2,3,4....
  14. // $stmt->bindColumn(1, $id);
  15. // $stmt->bindColumn(2, $uname);
  16. // $stmt->bindColumn(3, $email);
  17. // 用字段名称
  18. $stmt->bindColumn('id', $id);
  19. $stmt->bindColumn('uname', $uname);
  20. $stmt->bindColumn('email', $email);
  21. while ($stmt->fetch()) {
  22. printf("%d: %s ( %s )\n", $id, $uname, $email);
  23. }
  24. } else {
  25. die('查询失败: '. $stmt->errorInfo()[2]);
  26. }
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post