Blogger Information
Blog 17
fans 0
comment 0
visits 19036
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
面向对象操作mysql数据库及预处理方式
嘬一口啊
Original
1253 people have browsed it

面向对象操作数据库步骤

  • 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. ?>
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 14:35:47
笔记很详细,越往后面的学习,逻辑一定要跟上,不再是学习一些函数对数组,字符串的简单数据操作了,更多的是把这些当工具,去组织逻辑,完成某种功能。
1 floor
Author's latest blog post