Web渗透 之 PHP 与MySQL 交互

╰+攻爆jí腚メ 2022-12-08 04:18 216阅读 0赞

LAMP 是常见的组合。

BBS 的设计。

0x01 PHP 与MySQL进行交互

  • 建立与MySQL链接
  • 执行SQL 语句
  • 操作结果集对象
  • 关闭与MySQL 链接

0x02 与MySQL 建立链接

直接使用PHP 提供的函数。

连接指定的mysql服务器

mysqli_connect()

  1. $link=@mysqli_connect($host, $user, $password,$database,$port);
  2. //$host 服务器的地址,一般为127.0.0.1
  3. //$user 数据库的用户名
  4. //$password 数据库的密码
  5. //$database 与MySQL 建立连接时,所选择的数据库名字。[可选]
  6. //$port 连接数据库时,所使用的端口[可选]
  • 如果链接成功,返回object(mysqli)1 ;否则,返回bool(false)
  • $link 是对象类型的变量,相当于一个”令牌”。

连接错误时的提示

  1. mysqli_connect_errno(); //返回最后一次连接调用的错误代码
  2. mysqli_connect_error(); //返回一个字符串描述的最后一次连接调用的错误代码

设置默认字符编码

  1. mysqli_set_charset ($link,'utf-8);

选择特定的数据库

  1. mysqli_select_db($link,'bbs');

关闭与mysql服务器的连接

  1. mysqli_close($link);

0x03 执SQL语句

对数据库执行一条SQL语句

  1. $sql = "select message.id,user.username,message.title
  2. from user,message where message.uid=user.id";
  3. $results = mysqli_query($link,$sql);
  4. var_dump($results); // object(mysqli_result)#2
  5. //$link 与mysql 交互的”令牌“
  6. //$sql 执行的SQL 语句
  7. //$results 结果对象集合
  • 如果SQL 语句正常执行,就会返回对象类型object(mysqli_result)#2 的数据;否则,返回bool(false)
  • 对于insertdeleteupdate 等不会返回数据的SQL语句,在执行没有错误时将返回true
  • 对于返回数据的SQL语句执行成功的时候会返回结果集对象 ,可以使用操作结果集对象的函数来从中获取数据。
  • MYSQLI_STORE_RESULTMYSQLI_USE_RESULT 决定了mysqli clientserver 之间取结果集的方式。

    • MYSQLI_STORE_RESULT下,执行SQL时提取结果集返回给client,并分配内存,存储到用户程序空间中,之后mysqli_fetch_array() 相当于是从本地取数据;
    • MYSQLI_USE_RESULT方式下,mysqli_fetch_array()每次都要向server请求结果行。
    • MYSQLI_USE_RESULT,执行SQL的时候并没有从server 将结果集取回。

SQL语句错误

如果在执行SQL语句的时候发生错误,以上两个函数都将返回false。 并且可以使用以下函数处理错误原因:

  1. die("[".mysqli_errno($link)."]".mysqli_error($link));
  2. //$link 与MySQL 数据库交互的令牌

0x04 操作结果集对象的函数

从结果集对象中解析数据的常见函数

函数速查

函数说明mysqli_fetch_row()以索引数组的方式获取一条记录的数据mysqli_fetch_assoc()以关联数组的方式获取一条记录的数据mysqli_fetch_array()以索引数组或关联数组的方式获取一条记录的数据mysqli_fetch_all()以索引数组或关联数组的方式获取全部记录的数据mysqli_num_rows()获取结果中行的数量mysqli_free_result()释放与一个结果集合相关的内存

mysqli_num_rows()

  1. mysqli_num_rows($results);
  2. // 4
  3. //$results 结果集对象

mysqli_fetch_row()

  1. $result = mysqli_fetch_row($results); //array(3)
  2. $result = mysqli_fetch_row($results); //array(3)
  3. $result = mysqli_fetch_row($results); //array(3)
  4. $result = mysqli_fetch_row($results); //array(3)
  5. $result = mysqli_fetch_row($results); //null

mysqli_fetch_assoc()

  1. while($result = mysqli_fetch_assoc($results)){
  2. var_dump($result);
  3. }

简单应用

  1. <?php
  2. <?php
  3. /*
  4. 结果集对象$results 有几条记录
  5. 循环就执行几次
  6. 表格就有几行(除了表头以外)
  7. 就有几个<tr> 标签
  8. 每条记录有几个字段
  9. 数组中有多少个元素。
  10. 每一行中就有几个单元格
  11. 就是几个<td> 标签。
  12. */
  13. while($result = mysqli_fetch_assoc($results)){
  14. echo "<tr>";
  15. foreach($result as $k => $v){
  16. if($k == "title"){
  17. $html = "
  18. <td>
  19. <a
  20. href = './messageShow.php?id={$result['id']}'
  21. target = '_blank'>
  22. {$v}
  23. </a>
  24. </td>";
  25. echo $html;
  26. }else{
  27. echo "<td>";
  28. echo $v;
  29. echo "</td>";
  30. }
  31. }
  32. echo "</tr>";
  33. }
  34. ?>

0x05 其他常用函数

mysqli_real_escape_string()

转义用于SQL语句中的特殊字符防止SQL语句出错

  1. string mysqli_real_escape_string ( mysqli $link , string $escapestr );

发表评论

表情:
评论列表 (有 0 条评论,216人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQLPHP交互问题实例分析

    MySQL和PHP是Web开发中常见的两种技术。它们之间通过SQL(结构化查询语言)来获取、更新或删除数据库中的信息,而PHP则负责处理这些SQL命令,并将结果反馈给用户。