Blogger Information
Blog 55
fans 3
comment 0
visits 54537
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PDO数据访问抽象层
王佳祥
Original
798 people have browsed it

PDO数据访问抽象层

一、对PDO的理解

  • PDO(PHP Data Object)是php数据对象,即实现与不同数据库连接进行各种增删改查操作的工具。其优点是不管哪种数据库都能使用,兼容性稳定,其预处理可以防止sql注入确保数据安全。

二、安装PDO

  • 在php.ini文件中找到extension=php_pdo_mysql.dll去掉前面的分号注释,然后重启Apache


三、定义PDO所需要的常量

  1. <?php
  2. //定义数据库常量
  3. /*--------------------------------------------------------------------*/
  4. //主机名
  5. define('DB_HOST','localhost');
  6. //用户名
  7. define('DB_USER','root');
  8. //密码
  9. define('DB_PWD','wang1111');
  10. //数据库名
  11. define('DB_NAME','tp5');
  12. //端口号
  13. define('DB_PORT','3306');
  14. //数据库类型
  15. define('DB_TYPE','mysql');
  16. //数据库的编码
  17. define('DB_CHARSET','utf8');
  18. //定义PDO的DSN,数据库源名,包括数据库类型、主机名、数据库名称和数据库编码。
  19. define('DB_DSN',DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);
  20. //PDO驱动程序的名称,后面为一个冒号,再后面是可选的驱动程序连接数据库变量信息,如主机名端口号和数据库名
  21. //$dsn = 'mysql:host=localhost,dbname=tp5';
  22. /*-------------------------------------------------------------------------*/


四、PDO连接数据库

  1. <?php
  2. //使用DPO进行mysql类的数据库连接
  3. require "config.php";
  4. try{
  5. //数据库连接,返回一个PDO对象
  6. $pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
  7. //捕捉数据库信息的PDOEXCEPTION异常
  8. }catch(PDOException $e){
  9. echo $e->getMessage();
  10. //捕捉拥有Throwable接口的错误或者其他异常
  11. }catch(Throwable $e){
  12. echo $e->getMessage();
  13. }
  14. //更新数据
  15. $sql = "UPDATE `user` SET `username` = 'Flower' WHERE `age` = 32";
  16. //用exec()执行sql语句,不能执行带有结果集的sql语句,返回受影响的行数
  17. $res = $pdo->exec($sql);
  18. if($res == 0){
  19. //返回一个SQLSTATE码
  20. var_dump($pdo->errorcode());
  21. echo '<br>';
  22. //返回错误信息数组
  23. var_dump($pdo->errorInfo());
  24. }
  25. //查询数据
  26. $sql_S = "SELECT * FROM `user` ";
  27. //执行SQL语句,返回结果集用query()
  28. $stmt = $pdo->query($sql_S);
  29. //遍历集合
  30. foreach($stmt as $key => $value){
  31. echo '<br>';
  32. var_dump($value['username']);
  33. }


五、PDO防SQL注入

1.使用问号参数占位符的SQL预处理语句

  1. //1.使用问号参数占位符的SQL预处理语句
  2. $sql = "SELECT * FROM `user` WHERE `username` = ? AND `password` = ?";
  3. //用prepare()来执行sql语句并返回一个statement对象
  4. $stmt = $pdo->prepare($sql);
  5. //创建变量
  6. $username = "admin";
  7. $password = "123456";
  8. /* $username = "admin";
  9. $password = "123456";
  10. 用bindParam()绑定一个参数到指定的变量
  11. $stmt->bindParam(1,$username);
  12. $stmt->bindParam(2,$password); */
  13. //用bindValue()绑定一个参数到指定的值
  14. $stmt->bindValue(1,'admin');
  15. $stmt->bindValue(2,'123456');
  16. //用execute()执行一条预处理语句
  17. $stmt->execute();
  18. //var_dump($stmt);
  19. //rowCount()返回受上一个sql语句影响的行数
  20. echo $stmt->rowCount();


2.使用命名占位符的SQL预处理语句

  1. //2.使用命名占位符的SQL预处理语句
  2. $sql = "SELECT * FROM `user` WHERE `username` =:username AND `password` =:password";
  3. //用prepare()来执行sql语句并返回一个statement对象
  4. $stmt = $pdo->prepare($sql);
  5. //创建变量
  6. /*$username = "admin";
  7. $password = "123456";
  8. 用bindParam()绑定一个参数到指定的变量
  9. $stmt->bindParam(":username",$username);
  10. $stmt->bindParam(":password",$password);*/
  11. //用bindValue()绑定一个参数到指定的值
  12. $stmt->bindValue(":username",'admin');
  13. $stmt->bindValue(":password",'123456');
  14. //用execute()执行一条预处理语句
  15. $stmt->execute();
  16. //var_dump($stmt);
  17. //rowCount()返回受上一个sql语句影响的行数
  18. echo $stmt->rowCount();


六、bingParam和bingValue的区别

  • 1.bingParm():绑定一个参数到变量;bindValue():绑定一个参数到值;

  • 2.bindParm()绑定的变量可以在execute()执行语句之前用引用传值;bindValue()的值绑定之后就不会在改变

七.用PDO遍历数据

  1. <?php
  2. //引入连接数据库的常量配置
  3. require "config.php";
  4. //连接数据库
  5. try{
  6. $pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
  7. }catch(PDOException $e){
  8. echo $e->getMessage();
  9. }catch(Throwable $e){
  10. echo $e->getMessage();
  11. }
  12. //sql语句
  13. $sql = "SELECT * FROM `user`";
  14. //执行sql语句,用query()来执行,因为返回结果集
  15. $res = $pdo->query($sql);
  16. //把结果用关联数组来输出显示
  17. $res = $res->fetchAll(PDO::FETCH_ASSOC);
  18. ?>
  19. <!DOCTYPE html>
  20. <html lang="en">
  21. <head>
  22. <meta charset="UTF-8">
  23. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  24. <title>PDO遍历数据</title>
  25. <style>
  26. body{
  27. display: flex;
  28. justify-content: center;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <table border="1px" cellspacing="0" cellpadding="10px">
  34. <tr>
  35. <td>id</td>
  36. <td>username</td>
  37. <td>password</td>
  38. <td>age</td>
  39. </tr>
  40. <?php foreach($res as $key => $value){ ?>
  41. <tr>
  42. <td><?php echo $value['id'] ?></td>
  43. <td><?php echo $value['username'] ?></td>
  44. <td><?php echo $value['password'] ?></td>
  45. <td><?php echo $value['age'] ?></td>
  46. </tr>
  47. <?php } ?>
  48. </table>
  49. </body>
  50. </html>


八、学习总结

    通过练习,发现PDO和MYSQLi好多知识都是一样的道理,只不过换了一种写法,不过PDO可以兼容更多的数据库类型,非常的强大

Correcting teacher:GuanhuiGuanhui

Correction status:qualified

Teacher's comments:完成的很好,不过HTML中的foreach可以使用foreach的模板语法,这样更简洁。
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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!