Blogger Information
Blog 48
fans 0
comment 0
visits 34166
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
连接MySQL数据库并演示相关操作
丶久而旧之丶
Original
607 people have browsed it

数据库(MySQLi)

1.mysql类

  1. <?php
  2. // 检测mysqli扩展是否加载成功
  3. // 1.phpinfo();
  4. // 2.var_dump(get_loaded_extensions());
  5. // 3.function_exists('mysqli_connect');
  6. // 1.连接数据库
  7. $ms = new mysqli('localhost', 'root', 'root', 'user');
  8. // 判断是否有错误
  9. // $ms->connect_errno返回最近一次函数调用所产生的的错误代码
  10. // $ms->connect_error返回最近一次错误代码的描述,是字符串类型
  11. if ($ms->connect_errno) {
  12. die("CONNECT_ERRNO:" . $ms->connect_error);
  13. }
  14. // 获取客户端信息
  15. echo $ms->client_info, '<br>';
  16. // 获取服务端信息
  17. echo $ms->server_info;
  18. // 2.$ms->set_charset()设置默认的客户端字符集
  19. $ms->set_charset('utf-8');
  20. // 3.sql查询
  21. // 查询user库中的apple表
  22. $sql = "SELECT * FORM 'apple'";
  23. // 更新数据
  24. $sql1 = "UPDATE apple SET username='小花',sex='女' WHERE username='小明'";
  25. // 执行sql语句
  26. // mysqli_query()成功执行SELECT, SHOW, DECRIBE, EXPLAIN查询会返回一个mysqli_result对象
  27. // 其他查询成功返回true, 失败返回flase
  28. $res1 = $ms->query($sql1);
  29. var_dump($res1);
  30. // 插入数据
  31. $sql2 = "INSERT INTO apple(`username`,`password`,`sex`) VALUES('小美',sha1('333333'),'女')";
  32. $res2= $ms->query($sql2);
  33. var_dump($res2);
  34. // $ms->insert_id获取最近一次执行sql语句所产生的id值
  35. if ($res2) {
  36. echo '恭喜注册成功,您是本站第' . $ms->insert_id . '用户';
  37. }
  38. // 更新数据
  39. $sq3 = "UPDATE apple SET username='小夏',sex='女' WHERE username='小小'";
  40. $res = $ms->query($sql3);
  41. // $ms->affected_rows:返回上次执行sql语句后数据表中受影响的行数
  42. if ($res3) {
  43. echo $ms->affected_rows . '行记录受影响';
  44. }
  45. // 删除数据
  46. $sql4 = "DELETE FROM `apple` WHERE `id`>=6 ";
  47. $res4 = $ms->query($sql4);
  48. // 查看受影响行数
  49. if ($res4) {
  50. echo $ms->affected_rows . '行记录受影响';
  51. }
  52. // 关闭数据库的连接
  53. $ms->close();
  • 检测mysqli是否加载了

  • 更新数据

  • 插入数据

  • 删除数据

    2.mysqli(select查询)

  1. <?php
  2. $sql = "SELECT `username`,`password` FROM `apple`";
  3. // 执行SELECT,SHOW,DESCRIBE,EXPLAIN会返回一个mysql_result对象
  4. $res = $ms->query($sql);
  5. // 调用mysql_result对象中的方法获取成员属性
  6. // mysql_result::fetch_all--抓取所有的结果行并以关联数组或索引数组或两者都用返回结果集
  7. // fetch_all()默认返回索引数组,参数(MYSQLI_ASSOC)返回关联数组,参数(MYSQLI_BOTH)返回关联和索引两种并用数组
  8. echo "<pre>" . print_r($res->fetch_all(MYSQLI_ASSOC), true) . "</pre>";

3.mysqli预处理机制(防sql注入)

  1. <?php
  2. // mysqli_stmt类的对象可以定义和执行参数化的SQL命令,即sql语句的预处理机制
  3. // 使用'?'参数占位符构成sql语句的预处理机制
  4. $sql = "INSERT INTO `apple` (`username`,`password`,`sex`) VALUES(?,?,?)";
  5. // 使用prepare()执行sql语句后会返回一个statement对象
  6. $stmt = $ms->prepare($sql);
  7. // var_dump($stmt);
  8. // bind_param():绑定变量参数到prepared语句中
  9. // 第一个参数指定要绑定的数据类型s:字符串类型 i:整数类型 d:浮点型
  10. $username = '小黄';
  11. $password = sha1('444444');
  12. $sex = '男';
  13. $stmt->bind_param('sss', $username, $password, $sex);
  14. // 执行prepared预处理语句没有参数,成功返回true失败返回flase
  15. $res = $stmt->execute();
  16. var_dump($res);

4.sql注入

  • 登录页面
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>登录</title>
  7. <link type='text/css' rel='stylesheet' href='/php/0714/0714.css'>
  8. </head>
  9. <body>
  10. <h2>用户登录</h2>
  11. <form action="zhuru.php" method="post">
  12. <div class=item>
  13. <div class=name>
  14. 用户名:<input type='text' name='username' placeholder='请输入用户名'></div>
  15. <div class=psd>密&nbsp&nbsp&nbsp码:<input type='password' name='password' placeholder='请输入密码'></div>
  16. <div class=sub><input type='submit' name='sub'></div>
  17. </div>
  18. </form>
  19. </body>
  20. </html>
  • 提交跳转页面
  1. <?php
  2. $username = $_POST['username'];
  3. $password = sha1($_POST['password']);
  4. // echo $username . '<br>' . $password;
  5. // die;
  6. // 连接数据库
  7. $ms = new mysqli('localhost', 'root', 'root', 'user');
  8. // 判断是否连接成功
  9. if ($ms->connect_error) {
  10. die("CONNECT_ERROR:" . $ms->connect_errno);
  11. }
  12. // 设置字符集
  13. $ms->set_charset('utf-8');
  14. // 查询数据库
  15. $sql = "SELECT * FROM `apple` WHERE `username`='{$username}' AND `password`='{$password}'";
  16. // 执行sql语句
  17. $res = $ms->query($sql);
  18. print_r($res->fetch_all());
  19. // 不用预处理机制容易sql注入
  20. // 预处理语句
  21. $sql = "SELECT * FROM `apple` WHERE `username`=? AND `password`=?";
  22. // 使用prepare执行sql语句返回statement的对象
  23. $stmt = $ms->prepare($sql);
  24. // 使用statement对象方法绑定变量
  25. $stmt->bind_param('ss', $username, $password);
  26. // 使用execute()再次执行sql语句成功返回true,失败返回flase
  27. $stmt->execute();
  28. $res = $stmt->get_result();
  29. print_r($res->fetch_all());


不用预处理语句(用户名输入’ or 1=1 #就能获取数据库中的内容)


使用预处理语句后可较好的防止sql注入

总结

1.了解MySQLi的连接方法和数据的增,删,查,改
2.result类中的方法和statement类中还有很多方法,需要了解和尝试

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:预处理的普及, sql注入已成为历史,除非有内鬼
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