博客列表 >连接MySQL数据库并演示相关操作

连接MySQL数据库并演示相关操作

丶久而旧之丶
丶久而旧之丶原创
2020年07月28日 00:27:09612浏览

数据库(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类中还有很多方法,需要了解和尝试

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议