Blogger Information
Blog 17
fans 0
comment 0
visits 19019
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PDO操作数据库及PDOStatement预处理防sql注入
嘬一口啊
Original
1071 people have browsed it

PDO连接数据库步骤

  • 1.创建数据库连接配置文件
  1. define('DB_HOST','localhost'); //主机名
  2. define('DB_USER', 'root'); //连接数据库的用户名
  3. define('DB_PWD','******'); //连接数据库密码
  4. define('DB_NAME', 'test'); //数据库名称
  5. define('DB_PORT', '3306'); //数据库端口号
  6. define('DB_TYPE', 'mysql'); //数据库的型号
  7. define('DB_CHARSET', 'utf8'); //数据库的编码方式
  8. define('DB_DSN', DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);//定义PDO的DSN,数据源名,包括主机名,端口号和数据库名称。
  9. //PDO驱动程序的名称,后面为一个冒号,再后面是可选的驱动程序连接数据库变量信息,如主机名、端口和数据库名。
  10. $dsn='mysql:host=localhost;dbname=apple';
  • 2.连接数据库设置字符集并抛出异常
  1. // 引入mysqli配置文件
  2. require "config.php";
  3. //
  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. }
  • 3.定义sql语句
  1. 例:
  2. $sql = "select * from stu";
  • 4.执行sql语句
  1. // query() — 执行 SQL 语句,以 PDOStatement 对象形式返回结果集
  2. 例:
  3. $stmt = $pdo->query($sql);
  4. // 遍历输出结果集
  5. foreach ($stmt as $v) {
  6. echo $v['name'],'<br>';
  7. }
  8. exec()执行一条 UPDATE,DELETE,INSERT SQL 语句,并返回受影响的行数
  9. 例:
  10. $stmt = $pdo->exec($sql);
  • PDO常用方法及其应用
  1. errorInfo() 获取上一次句柄上一次操作的错误信息数组
  2. errorCode() 获取跟数据库句柄上一次操作相关的 SQLSTATE
  3. PDO::lastInsertId() 返回最后插入行的ID或序列值
  4. PDOStatement::fetch() 是用来获取一条记录
  5. PDOStatement::fetchAll() 是获取所有记录集到一个中

PDOStatement对象/预处理

  • 引入配置文件,连接数据库,设置字符集,并抛出异常
  1. // 引入mysqli配置文件
  2. require "config.php";
  3. // 连接数据库
  4. try {
  5. ////数据库连接,得到一个PDO对象
  6. $pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
  7. // var_dump($pdo);
  8. //捕捉特定于数据库信息的PDOEXCEPTION 异常
  9. } catch(PDOException $e) {
  10. echo $e->getMessage();
  11. //捕捉拥有Throwable接口的错误或者其他异常
  12. } catch (Throwable $e) {
  13. echo $e->getMessage();
  14. }
  • 定义sql语句使用命名参数占位符定义预处理sql语句
  1. // 使用命名参数占位符定义预处理sql语句
  2. $sql = "select * from stu where age=:age";

-定义sql语句使用?占位符定义预处理sql语句

  1. // 使用?占位符定义预处理sql语句
  2. $sql = "select * from stu where age=?";
  • prepare() — 准备要执行的语句,并返回语句对象
  1. 例:
  2. $stmt = $pdo->prepare($sql);
  • 绑定参数方法 1[PDOStatement::bindParam — 绑定一个参数到指定的变量名]
  1. 例:
  2. // 使用PDOStatement::bindParam给一个使用?占位符的sql语句绑定值
  3. $sql = "SELECT * FROM `STU` WHERE AGE=?";
  4. $age = 12;
  5. $stmt->bindParam(1,$age);
  6. // 使用PDOStatement::bindParam给一个使用命名参数占位符的sql语句绑定值
  7. $sql = "SELECT * FROM `STU` WHERE AGE=:age";
  8. $age = 12;
  9. $stmt->bindParam(":age",$age);
  • 绑定参数方法 2[PDOStatement::bindValue — 把一个值绑定到一个参数]
  1. // 使用PDOStatement::bindValue给一个使用?占位符的sql语句绑定值
  2. 例:
  3. $age = 12;
  4. 4naem = '张三';
  5. $stmt->bindValue(1,$age);
  6. $stmt->bindValue(2,$name);
  7. // 使用PDOStatement::bindValue给一个使用命名参数占位符的sql语句绑定值
  8. 例:
  9. $sql = "SELECT * FROM `STU` WHERE `AGE`=:age AND `NAME`=:name";
  10. $age = 12;
  11. 4naem = '张三';
  12. $stmt->bindValue(":age",$age);
  13. $stmt->bindValue(":name",$name);
  • 执行预处理sql语句[PDOStatement::execute — 执行一条预处理语句]
  1. 例:
  2. $stmt->execute();
  • 绑定参数 bindParam()与bindValue();的区别
  1. 区别1: PDOStatement::bindValue 把一个值绑定到一个参数,PDOStatement::bindParam 绑定一个参数到指定的变量名
  2. 区别2: PDOStatement::bindParam()的第二个参数是按引用传递,所以只能提供变量作为参数,只有PDOStatement::execute()被执行的时候才取其值。
  3. PDOStatement::bindValue()为占位符参数绑定值,只要绑定成功,就不会再变了。
  • PDO预处理中常用的方法
  1. // PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
  2. // PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
  3. // PDOStatement::fetch — 从结果集中获取下一行
  4. // PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
  5. // PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数

使用PDO操作数据库遍历出数据表中的数据

  • 数据库配置文件
  1. <?php
  2. // 定义连接数据库的常量
  3. define('DB_HOST','localhost'); // 主机名
  4. define('DB_USER','root'); // 用户名
  5. define('DB_PWD', 'root'); // 密码
  6. define('DB_NAME', 'test'); // 数据库名
  7. define('DB_PORT', '3306'); //端口号
  8. define('DB_TYPE', 'mysql'); // 数据库类型
  9. define('DB_CHARSET', 'utf8'); // 字符集
  10. define('DB_DSN',DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);
  11. // 得二种源数据方式
  12. // $dsn = 'mysql:host=localhost;dbname=test';
  13. // echo $dsn;
  14. ?>
  • PDO操作数据遍历数据文件
  1. <?php
  2. // 使用pdo遍历数据表中的数据
  3. // 引入数据库配置文件
  4. require "./config.php";
  5. // 连接数据库
  6. try {
  7. $pdo = new PDO(DB_DSN,DB_USER,DB_PWD);
  8. // 抛出pdo连接数据库的错误
  9. } catch (PDOException $e) {
  10. $e->getMessage();
  11. //捕捉拥有Throwable接口的错误或者其他异常
  12. } catch (Throwable $e) {
  13. echo $e->getMessage();
  14. }
  15. // 使用命名参数方法定义预处理sql语句
  16. $sql = "SELECT * FROM `stu` WHERE id>:id";
  17. // 准备sql语句
  18. $stmt = $pdo->prepare($sql);
  19. // 使用PDOStatement::bindParam绑定参数
  20. $id = 1;
  21. $stmt->bindParam(":id",$id);
  22. // 执行预处理sql语句判断是否成功
  23. if ($stmt->execute()) {
  24. echo "<table border='1' width='300px' align='center' >";
  25. echo "<tr align='center'>";
  26. echo "<td>ID</td>";
  27. echo "<td>姓名</td>";
  28. echo "<td>年龄</td>";
  29. echo "</tr>";
  30. // 循环数据
  31. foreach ($stmt->fetchall() as $v) {
  32. echo "<tr align='center'>";
  33. echo "<td>{$v['id']}</td>";
  34. echo "<td>{$v['name']}</td>";
  35. echo "<td>{$v['age']}</td>";
  36. echo "</tr>";
  37. }
  38. echo "</table>";
  39. }
  40. ?>
  • 遍历输出结果

Correcting teacher:灭绝师太灭绝师太

Correction status:qualified

Teacher's comments:
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
1 comments
灭绝师太 2020-07-20 17:42:30
总结的很好,可以结合上周学习的内容,做个小实战项目。
1 floor
Author's latest blog post