博客列表 >面向对象操作mysql数据库及预处理方式

面向对象操作mysql数据库及预处理方式

嘬一口啊
嘬一口啊原创
2020年07月20日 09:08:341252浏览

面向对象操作数据库步骤

  • 1.连接数据库及判断是否连接成功

mysqli对象的属性 作用
$mysqli::connect_errno 返回最后一次连接数据库的错误代码
$mysqli::connect_error 返回最后一次连接数据库的错误描述,类型为字符串
$mysqli::connect_error 返回最后一次连接数据库的错误描述,类型为字符串
$mysqli::errno 返回最近一次函数调用所产生的错误代码
$mysqli::error 返回最近一次错误代码的描述,类型是字符串
  1. new mysqli('主机名','用户名','密码','要连接的数据库名');
  2. 例:
  3. // @:错误抑制符
  4. // 连接成功打印输出$mysqli是一个对象,失败返回fales
  5. $mysqli = @new mysqli('localhost','root','root','test');
  6. // 判断是否连接成功
  7. if ($mysqli->connect_errno) {
  8. // die();就是停止掉
  9. // 停止程序运行,提示错误
  10. die("CONNECT_ERROR:".$mysqli->connect_error);
  11. }
  • 2.设置字符集

  1. $mysqli->set_charset('utf-8');
  • 3.定义sql语句[根据自身需求来编写]

  1. `添加数据sql语句`
  2. INSERT INTO 表名 (字段名,字段名...) VALUES (对应值,对应值);
  3. 例:
  4. INSERT INTO user (username,age) VALUES ('张三',21);
  5. `删除语句:删除语句一定要加wher条件否则很惨`
  6. DELETE FROM USER WHERE 条件;
  7. 例:
  8. DELETE FROM USER WHERE ID=2;
  9. `修改语句`
  10. UPDATE 表名 SET `字段名`='修改的值',`字段名`='修改的值' WHERE 条件
  11. 例:
  12. UPDATE USER SET `USERNAME`='李四',`age`='18' WHERE ID=1;
  13. `查询语句`
  14. SELECT * FROM 表名; // 查询该表所有数据
  15. SELECT * FROM 表名 WHERE 条件; // 查询复合条件的数据
  16. SELECT 字段,字段 FROM 表名 WHERE 条件; // 查询指定条件的指定字段数据
  17. 例:
  18. SELECT * FROM USER;
  • 4.执行sql语句

删除/修改/添加语句执行成功后返回true;,执行失败返回false

查询语句执行成功返回mysqli_result 对象,失败返回false

  1. // $sql就是承接的定义sql语句的变量
  2. // 执行完使用一个变量来承接[$res就是承接的变量]
  3. $res = $mysqli->query($sql);
  • 5.使用执行sql语句返回的mysqli_result结果集对象

这个类的对象包含SELECT查询的结果、获取结果集中数据的成员方法,以及和查询的结果有关的成员属性。

$mysqli::insert_id:返回上一次执行添加语句的id

mysqli_result对象中的属性 作用
mysqli_result::fetch_all() 抓取所有的结果行并且以关联数组,数值索引数组,或者两者皆有的方式返回结果集。fetch_all(MYSQLI_ASSOC/MYSQLI_NUM/ MYSQLI_BOTH)
mysqli_result::fetch_array() 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果 fetch_array(MYSQLI_ASSOC, MYSQLI_NUM, or MYSQLI_BOTH)
mysqli_result::fetch_assoc() 以一个关联数组方式抓取一行结果
mysqli_result::fetch_row() 以一个枚举数组方式返回一行结果
$mysqli_result::num_rows 获取结果中行的数量
  1. 例:
  2. // 执行sql语句
  3. $res = $mysqli->query($sql);
  4. $res->mysqli_result::fetch_all(MYSQLI_ASSOC);
  5. 例:
  6. $res->mysqli_result::fetch_array(MYSQLI_ASSOC);
  7. 例:
  8. $res->mysqli_result::fetch_assoc();
  9. 例:
  10. $res->mysqli_result::fetch_row();
  11. 例:
  12. $res->$mysqli_result::num_rows;
  13. 例:
  14. $res->mysqli_result::free();
  • 6.释放结果集

mysqli_result::free():释放与一个结果集相关的内存

  1. 例:
  2. // 执行sql语句
  3. $res = $mysqli->query($sql);
  4. // 释放结果集
  5. $res->free():
  • 7.关闭打开的数据库

mysqli::close();:关闭先前打开的数据库连接

  1. // 这里的$mysqli就是承接连接数据库返回值的变量
  2. $mysqli->close($mysqli);
  • 综合实例

  1. // 实例
  2. // 登录界面
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <title>用户登录</title>
  7. </head>
  8. <body>
  9. <h2>用户登录</h2>
  10. <form action="actions.php" method="post">
  11. <!-- <form action="action.php" method="post"> -->
  12. <table>
  13. <tr>
  14. <td>用户名</td>
  15. <td>
  16. <input type="text" name="username">
  17. </td>
  18. </tr>
  19. <tr>
  20. <td>密码</td>
  21. <td>
  22. <input type="password" name="password">
  23. </td>
  24. </tr>
  25. <tr align="center">
  26. <td colspan="2">
  27. <input type="submit" name="sub">
  28. </td>
  29. </tr>
  30. </table>
  31. </form>
  32. </body>
  33. </html>
  1. //数据处理文件
  2. <?php
  3. // 不使用任何方sql注入
  4. // 接受表单传过来的值
  5. $username = $_POST['username'];
  6. $password = $_POST['password'];
  7. // 连接数据库
  8. $mysqli = @new mysqli('localhost','root','root','test');
  9. if ($mysqli->connect_error) {
  10. die("CONNECT_ERROR:".$mysqli->connect_error);
  11. }
  12. // 设置字符集
  13. $mysqli->set_charset('utf-8');
  14. // 创建sql语句
  15. $sql = "SELECT * FROM `user` WHERE `name`='{$username}' AND `password`='{$password}'";
  16. // 执行sql语句
  17. $res = $mysqli->query($sql);
  18. // 查看受影响行数
  19. // var_dump($res->num_rows);
  20. // 查看所有数据
  21. // $res->fetch_all();
  22. // 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果
  23. // $res->fetch_array();
  24. // 以一个关联数组方式抓取一行结果
  25. // $res->fetch_assoc()
  26. // 以一个枚举数组方式返回一行结果
  27. // $res->fetch_row();
  28. // 释放结果集
  29. // $res->free():
  30. // 关闭数据库
  31. // $mysqli->close($mysqli);
  32. ?>

防sql注入/预处理/mysqli_stmt类

mysqli_stmt类的对象可以定义和执行参数化的SQL命令,即预处理(Prepared Statement)的机制。

mysqli_stmt对象中的属性 作用
$mysqli_stmt::affected_rows 返回受上次执行语句影响的总行数:修改、删除或插入
$mysqli_stmt::num_rows 返回语句结果集中的行数
$mysqli_stmt::errno 返回最近一次语句调用的错误代码
$mysqli_stmt::error 返回最后一条语句错误的字符串描述
mysqli_stmt::prepare() 准备执行 SQL 语句
mysqli_stmt::bind_param() 绑定变量参数到 prepared 语句
mysqli_stmt::bind_result() 绑定变量参数到 prepared 语句,用于结果存储
mysqli_stmt::execute() 执行预处理sql语句
mysqli_stmt::get_result() 获取 prepared 语句中的结果。
mysqli_stmt::fetch() 获取 prepared 语句中的结果, 返回true,否则返回false
mysqli_stmt::free_result() 释放给定语句处理存储的结果集所占内存
  1. $sql = "INSERT INTO 表名(字段名) values (?[使用?给值占位])";
  2. 例:
  3. $sql = "INSERT INTO STU(USERNAME) VALUES (?)";
  4. // 给预处理sql语句准备sql语句
  5. $stmt = $mysqli->prepare($sql);
  6. // 给占位符绑定值
  7. $stmt->bind_param('值类型[首字母缩写]',变量[值用一个变量]);
  8. 例:
  9. $name = '秀儿';
  10. // s 是字符串类型
  11. $stmt->bind_param('s',$name);
  12. // 执行预处理语句[mysqli_stmt::execute()执行 prepared 查询]
  13. 例:
  14. $res = $stmt->execute();
  15. // 判断sql语句是否执行成功
  16. if ($res) {
  17. echo $stmt->affected_rows;
  18. } else {
  19. echo '错误';
  20. }
  • 综合实例

  1. // 登录界面
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title>用户登录</title>
  6. </head>
  7. <body>
  8. <h2>用户登录</h2>
  9. <form action="actions.php" method="post">
  10. <!-- <form action="action.php" method="post"> -->
  11. <table>
  12. <tr>
  13. <td>用户名</td>
  14. <td>
  15. <input type="text" name="username">
  16. </td>
  17. </tr>
  18. <tr>
  19. <td>密码</td>
  20. <td>
  21. <input type="password" name="password">
  22. </td>
  23. </tr>
  24. <tr align="center">
  25. <td colspan="2">
  26. <input type="submit" name="sub">
  27. </td>
  28. </tr>
  29. </table>
  30. </form>
  31. </body>
  32. </html>
  1. // 数据处理文件
  2. <?php
  3. // 使用预处理防sql注入
  4. // 接受post传值
  5. $username = $_POST['username'];
  6. $password = $_POST['password'];
  7. // 连接数据库
  8. $mysqli = @new mysqli('localhost','root','root','test');
  9. if ($mysqli->connect_error) {
  10. die("COONECT_ERROR:".$mysqli->connect_error);
  11. }
  12. // 设置字符集
  13. $mysqli->set_charset('utf-8');
  14. // 设置sql语句
  15. $sql = "SELECT * FROM `user` WHERE `name`=? AND `password`=?";
  16. // 准备预处理sql语句
  17. $stmt = $mysqli->prepare($sql);
  18. // 绑定参数
  19. $stmt->bind_param('ss',$username,$password);
  20. // 执行预处理sql语句
  21. $stmt->execute();
  22. // mysqli_stmt::get_result()获取 prepared 语句中的结果。
  23. $res = $stmt->get_result();
  24. // 返回受上次执行语句影响的总行数:修改、删除或插入
  25. // $stmt->affected_rows;
  26. // 返回语句结果集中的行数
  27. // $stmt->num_rows
  28. // 返回最近一次语句调用的错误代码
  29. // $stmt->errno;
  30. //返回最后一条语句错误的字符串描述
  31. // $stmt->error;
  32. // 获取 prepared 语句中的结果, 返回true,否则返回false
  33. // $stmt->fetch();
  34. // 释放结果集
  35. $stmt->free_result();
  36. // 关闭数据库
  37. // $mysqli->close($mysqli);
  38. ?>

使用mysqli_result对象中的属性将获得的结果集中的数据[二维数组]遍历出来

  1. <?php
  2. // 连接数据
  3. $mysqli = @new mysqli('localhost','root','root','test');
  4. if ($mysqli->connect_errno) {
  5. die("CONNECT:".$mysqli->connect_errno);
  6. }
  7. // 设置字符集
  8. $mysqli->set_charset('utf-8');
  9. // 设置sql语句
  10. $sql = "SELECT * FROM `stu`";
  11. // 执行sql语句
  12. $res = $mysqli->query($sql);
  13. $res = $res->fetch_all(MYSQLI_ASSOC);
  14. if (is_array($res) && !empty($res)) {
  15. echo "<table border='1' width='300px' align='center' >";
  16. echo "<tr align='center'>";
  17. echo "<td>ID</td>";
  18. echo "<td>姓名</td>";
  19. echo "<td>年龄</td>";
  20. echo "</tr>";
  21. foreach ($res as $v) {
  22. echo "<tr align='center'>";
  23. echo "<td>{$v['id']}</td>";
  24. echo "<td>{$v['name']}</td>";
  25. echo "<td>{$v['age']}</td>";
  26. echo "</tr>";
  27. }
  28. echo "</table>";
  29. }
  30. ?>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
灭绝师太2020-07-20 14:35:471楼
笔记很详细,越往后面的学习,逻辑一定要跟上,不再是学习一些函数对数组,字符串的简单数据操作了,更多的是把这些当工具,去组织逻辑,完成某种功能。