博客列表 >PHP:PDO 的 CURD

PHP:PDO 的 CURD

张九明
张九明原创
2020年05月17日 14:32:36639浏览

PHP:PDO 的 CURD

1.数据库参数

  1. <?php
  2. namespace php_db;
  3. //数据库配置文件
  4. return
  5. [
  6. //默认数据库类型
  7. 'type' => $type ?? 'mysql',
  8. //默认主机名或IP
  9. 'host' => $host ?? 'www.my.com',
  10. //默认字符集
  11. 'charset' => $charset ?? 'uft8',
  12. //默认数据库名
  13. 'dbname' => $dbname ?? 'php_school',
  14. //默认端口号
  15. 'port' => $port ?? '3306',
  16. //默认数据库用户名
  17. 'dbuser' => $dbuser ?? 'root',
  18. //默认数据库密码
  19. 'dbpassword' => $dbpassword ?? 'root'
  20. ];

2.数据库连接

  1. <?php
  2. /*
  3. 此文件是连接数据库文件;
  4. */
  5. //定议命名空间,php_db;
  6. namespace php_db;
  7. //引入异常处理类Exception;
  8. use Exception;
  9. //引入pdo命名空间;
  10. use pdo;
  11. //引入数据库参数文件;
  12. $config = require 'config/db.php';
  13. ini_set('display_errors', 1);
  14. error_reporting(E_ALL);
  15. //展开数组,以key为变量并赋值
  16. extract($config);
  17. //建立DSN串;
  18. $dsn = sprintf("%s:host=%s;dbname=%s;characterset=%s", $type, $host, $dbname, $charset);
  19. try {
  20. $pdo = new pdo($dsn, $dbuser, $dbpassword);
  21. } catch (Exception $e) {
  22. die('error:' . $e->getMessage() . '</br>');
  23. }

3.SELECT 单条查询

  1. <?php
  2. /*实现查询功能;*/
  3. //定议查询命名空间;
  4. namespace php_select;
  5. //引入连接文件;
  6. require 'connect.php';
  7. //引入数据库命名空间;
  8. use php_db;
  9. //引入PDO命名空间;
  10. use PDO;
  11. //建立查询语句;
  12. $columname = "`id_student`,`name_student`,`sex_student`,`grade_student`,`class_student`,`duty_student` ";
  13. $tablename = 'student';
  14. $condition = "duty_student = '学生' LIMIT 5";
  15. $sql = 'SELECT ' . $columname . ' From ' . $tablename . ' WHERE ' . $condition;
  16. // $sql = 'SELECT :columname
  17. // From `student`
  18. // WHERE `duty_student` = "学生"
  19. // LIMIT 5';
  20. //预处理SQL语名,并赋给一个对象$stement;
  21. /*
  22. @var param $stement
  23. */
  24. // $columname = "`id_student`,`name_student`,`sex_student`,`grade_student`,`class_student`,`duty_student` ";
  25. // $columname = "id_student";
  26. $stement = NULL;
  27. $stement = $pdo->prepare($sql);
  28. // $stement->bindParam('columname', $columname, PDO::PARAM_STR);
  29. // echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:', $columname, '<hr>';
  30. //执行查询语句;
  31. $stement->execute();
  32. // var_dump($stemnet);
  33. // die();
  34. while ($student = $stement->fetch(PDO::FETCH_ASSOC)) {
  35. // var_dump($student);
  36. $student['sex_student'] ? $student['sex_student'] = '男' : $student['sex_student'] = '女';
  37. // echo $student['sex_student'];
  38. // var_dump($student);
  39. vprintf("学号:%s,姓名:%s,性别:%s,%s年级%s班,职务:%s<br>", $student);
  40. }
  41. //关闭数据库连接,释放对象;
  42. unset($pdo, $stemnet, $student);

实例结果:
SELECT1

4.SELECT 多条查询

  1. <?php
  2. /*实现查询功能;*/
  3. //定议查询命名空间;
  4. namespace php_select;
  5. //引入连接文件;
  6. require 'connect.php';
  7. //引入数据库命名空间;
  8. use php_db;
  9. //引入PDO命名空间;
  10. use PDO;
  11. //建立查询语句;
  12. $columname = "`id_student`,`name_student`,`sex_student`,`grade_student`,`class_student`,`duty_student` ";
  13. $tablename = 'student';
  14. $condition = "duty_student = '学生' LIMIT 10";
  15. $sql = 'SELECT ' . $columname . ' From ' . $tablename . ' WHERE ' . $condition;
  16. //预处理SQL语名,并赋给一个对象$stement;
  17. /*
  18. @var param $stement
  19. */
  20. $stement = $pdo->prepare($sql);
  21. // $stement->bindParam('columname', $columname, PDO::PARAM_STR);
  22. // echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:', $columname, '<hr>';
  23. //执行查询语句;
  24. $stement->execute();
  25. // var_dump($stemnet);
  26. // die();
  27. $students = $stement->fetchall(PDO::FETCH_ASSOC);
  28. // echo print_r($students, true);
  29. foreach ($students as $key => $student) {
  30. // var_dump($student);
  31. $student['sex_student'] ? $student['sex_student'] = '男' : $student['sex_student'] = '女';
  32. vprintf("学号:%s , 姓名:%s , 性别:%s , %s年级%s班 , 职务:%s<br>", $student);
  33. }
  34. //关闭数据库连接,释放对象;
  35. unset($pdo, $stemnet, $student);

实例结果:
SELET2

5.INSERT 插入数据

  1. <?php
  2. /*实现插入功能;*/
  3. //定议查询命名空间;
  4. namespace php_insert;
  5. //引入连接文件;
  6. require 'connect.php';
  7. //引入数据库命名空间;
  8. use Exception;
  9. use php_db;
  10. //引入PDO命名空间;
  11. use PDO;
  12. //建立查询语句;
  13. $data = NULL; //初始化变理;
  14. //拼装列名及值;
  15. $columvalues = ['id_student' => '129', 'name_student' => '周一一', 'sex_student' => '0', 'grade_student' => '2', 'class_student' => '1', 'duty_student' => '学生'];
  16. foreach ($columvalues as $key => $value)
  17. $data .= '`' . $key . '`' . ' = ' . '\'' . (string) $value . '\'' . ',';
  18. //去除最的,
  19. $data = substr($data, 0, -1);
  20. // 表名
  21. $tablename = 'student';
  22. // $condition = "duty_student = '学生' LIMIT 10";//条件限制;
  23. // 拼装SQL语句;
  24. $sql = 'INSERT ' . $tablename . ' SET ' . $data;
  25. // $sql = 'SELECT :columname
  26. // From `student`
  27. // WHERE `duty_student` = "学生"
  28. // LIMIT 5';
  29. //预处理SQL语名,并赋给一个对象$stement;
  30. /*
  31. @var param $stement
  32. */
  33. $stement = $pdo->prepare($sql);
  34. // echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:', extract($columvalues), '<hr>';
  35. //执行查询语句;
  36. $stement->execute();
  37. //异常处理
  38. if ($stement->rowcount() === 1)
  39. echo '插入数据成功', '学号:', $pdo->lastInsertId();
  40. else {
  41. echo '插入数据不成功';
  42. }
  43. //关闭数据库连接,释放对象;
  44. unset($pdo, $stemnet, $student);

实例结果:
INSERT

6.UPDATE 修改数据

  1. <?php
  2. /*采用pdo实现修改功能;*/
  3. //定议查询命名空间;
  4. namespace php_update;
  5. //引入连接文件;
  6. require 'connect.php';
  7. //引入数据库命名空间;
  8. use Exception;
  9. use php_db;
  10. //引入PDO命名空间;
  11. use PDO;
  12. //建立修改语句;
  13. $data = null; //初始化变理;
  14. //拼装列名及值;
  15. $columvalues = ['id_student' => '198', 'name_student' => '周一一', 'sex_student' => '0', 'grade_student' => '2', 'class_student' => '1', 'duty_student' => '学生'];
  16. foreach ($columvalues as $key => $value)
  17. $data .= '`' . $key . '`' . ' = ' . '\'' . (string) $value . '\'' . ',';
  18. //去除最后的,
  19. $data = substr($data, 0, -1);
  20. // 表名
  21. $tablename = 'student';
  22. //条件限制;
  23. $condition = "id = '139'";
  24. // 拼装SQL语句;
  25. $sql = 'UPDATE ' . $tablename . ' SET ' . $data . ' WHERE ' . $condition;
  26. //预处理SQL语名,并赋给一个对象$stement;
  27. /*
  28. @var param $stement
  29. */
  30. $stement = $pdo->prepare($sql);
  31. // echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:', extract($columvalues), '<hr>';
  32. // die();
  33. //执行修改语句;
  34. $stement->execute();
  35. if ($stement->rowcount() === 1)
  36. echo '修改数据成功';
  37. else {
  38. echo '修改数据不成功';
  39. }
  40. //关闭数据库连接,释放对象;
  41. unset($pdo, $stemnet, $student);

实例结果:
UPDATE

7.DELETE 删除数据

  1. <?php
  2. /*采用pdo实现删除功能;*/
  3. //定议查询命名空间;
  4. namespace php_delete;
  5. //引入连接文件;
  6. require 'connect.php';
  7. //引入数据库命名空间;
  8. use Exception;
  9. use php_db;
  10. //引入PDO命名空间;
  11. use PDO;
  12. //建立修改语句;
  13. // $data = null; //初始化变理;
  14. //拼装列名及值;
  15. // $columvalues = ['name_student' => '周一一', 'sex_student' => '0', 'grade_student' => '2', 'class_student' => '1', 'duty_student' => '学生'];
  16. // foreach ($columvalues as $key => $value)
  17. // $data .= '`' . $key . '`' . ' = ' . '\'' . (string) $value . '\'' . ',';
  18. // //去除最的,
  19. // $data = substr($data, 0, -1);
  20. $tablename = 'student'; //表名;
  21. $condition = "id = '129'"; //条件;
  22. //SQL语句拼装
  23. $sql = 'DELETE FROM ' . $tablename . ' WHERE ' . $condition;
  24. //预处理SQL语名,并赋给一个对象$stement;
  25. /*
  26. @var param $stement
  27. */
  28. $stement = $pdo->prepare($sql);
  29. // echo '<hr>', 'SQL语句是:', $sql, '<hr>', '列名是:';
  30. //执行修改语句;
  31. $stement->execute();
  32. //异常处理;
  33. if ($stement->rowcount() === 1)
  34. echo '删除数据成功';
  35. else {
  36. echo '删除数据不成功';
  37. }
  38. //关闭数据库连接,释放对象;
  39. unset($pdo, $stemnet, $student);

实例结果:
实例结果:

8.总结

  • 数据库操作步骤

    • 连接参数;
    • 引入 PDO 命名空间;
    • 使用 PDO 创建数据库对象,连接数库;
    • 写 SQL 语句并做预处理,防止注入;
    • 可用 bindParam()绑定参数;
    • execute()执行语句;
    • 处理结果显示,并对异常处理;
    • 释放无用的对象、变量等。
  • 再使用 bindParam()时,只能绑定参数值,不能绑定整个字段变量。
    例如:SELECT 列名 FROM 表名 WHERE 条件,不能整体替换中文部分。
    使用 PHP 字符串操作,然后组合成代替整体 SQL 语句再做预处理。

  • 语句不熟悉,经常写错;需要进一步练习写代码。
  • 对数组函数不熟悉,总是查找手册后才能知道用哪个函数更合适。
    需要背各种 PHP 函数及用法。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议