Blogger Information
Blog 7
fans 0
comment 0
visits 4908
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP:PDO 的 CURD
张九明
Original
633 people have browsed it

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 函数及用法。
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:如果使用独立的绑定指令, bindparams, bindValue并不相同, 一个是引用绑定, 一个是值绑定, 一个用在多次执行环境 , 一个不行, 具体区别可查询手册
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