Web渗透 之 PHP 与MySQL 交互
LAMP 是常见的组合。
BBS 的设计。
0x01 PHP 与MySQL进行交互
- 建立与MySQL链接
- 执行SQL 语句
- 操作结果集对象
- 关闭与MySQL 链接
0x02 与MySQL 建立链接
直接使用PHP 提供的函数。
连接指定的mysql服务器
mysqli_connect()
$link=@mysqli_connect($host, $user, $password,$database,$port);
//$host 服务器的地址,一般为127.0.0.1
//$user 数据库的用户名
//$password 数据库的密码
//$database 与MySQL 建立连接时,所选择的数据库名字。[可选]
//$port 连接数据库时,所使用的端口[可选]
- 如果链接成功,返回
object(mysqli)1
;否则,返回bool(false)
$link
是对象类型的变量,相当于一个”令牌”。
连接错误时的提示
mysqli_connect_errno(); //返回最后一次连接调用的错误代码
mysqli_connect_error(); //返回一个字符串描述的最后一次连接调用的错误代码
设置默认字符编码
mysqli_set_charset ($link,'utf-8);
选择特定的数据库
mysqli_select_db($link,'bbs');
关闭与mysql服务器的连接
mysqli_close($link);
0x03 执SQL语句
对数据库执行一条SQL语句
$sql = "select message.id,user.username,message.title
from user,message where message.uid=user.id";
$results = mysqli_query($link,$sql);
var_dump($results); // object(mysqli_result)#2
//$link 与mysql 交互的”令牌“
//$sql 执行的SQL 语句
//$results 结果对象集合
- 如果SQL 语句正常执行,就会返回对象类型
object(mysqli_result)#2
的数据;否则,返回bool(false)
。 - 对于
insert
,delete
,update
等不会返回数据的SQL语句,在执行没有错误时将返回true
。 - 对于返回数据的SQL语句执行成功的时候会返回结果集对象 ,可以使用操作结果集对象的函数来从中获取数据。
MYSQLI_STORE_RESULT
和MYSQLI_USE_RESULT
决定了mysqli client
和server
之间取结果集的方式。MYSQLI_STORE_RESULT
下,执行SQL时提取结果集返回给client,并分配内存,存储到用户程序空间中,之后mysqli_fetch_array()
相当于是从本地取数据;MYSQLI_USE_RESULT
方式下,mysqli_fetch_array()
每次都要向server
请求结果行。MYSQLI_USE_RESULT
,执行SQL的时候并没有从server
将结果集取回。
SQL语句错误
如果在执行SQL语句的时候发生错误,以上两个函数都将返回false。 并且可以使用以下函数处理错误原因:
die("[".mysqli_errno($link)."]".mysqli_error($link));
//$link 与MySQL 数据库交互的令牌
0x04 操作结果集对象的函数
从结果集对象中解析数据的常见函数
函数速查
函数说明mysqli_fetch_row()以索引数组的方式获取一条记录的数据mysqli_fetch_assoc()以关联数组的方式获取一条记录的数据mysqli_fetch_array()以索引数组或关联数组的方式获取一条记录的数据mysqli_fetch_all()以索引数组或关联数组的方式获取全部记录的数据mysqli_num_rows()获取结果中行的数量mysqli_free_result()释放与一个结果集合相关的内存
mysqli_num_rows()
mysqli_num_rows($results);
// 4
//$results 结果集对象
mysqli_fetch_row()
$result = mysqli_fetch_row($results); //array(3)
$result = mysqli_fetch_row($results); //array(3)
$result = mysqli_fetch_row($results); //array(3)
$result = mysqli_fetch_row($results); //array(3)
$result = mysqli_fetch_row($results); //null
mysqli_fetch_assoc()
while($result = mysqli_fetch_assoc($results)){
var_dump($result);
}
简单应用
<?php
<?php
/*
结果集对象$results 有几条记录
循环就执行几次
表格就有几行(除了表头以外)
就有几个<tr> 标签
每条记录有几个字段
数组中有多少个元素。
每一行中就有几个单元格
就是几个<td> 标签。
*/
while($result = mysqli_fetch_assoc($results)){
echo "<tr>";
foreach($result as $k => $v){
if($k == "title"){
$html = "
<td>
<a
href = './messageShow.php?id={$result['id']}'
target = '_blank'>
{$v}
</a>
</td>";
echo $html;
}else{
echo "<td>";
echo $v;
echo "</td>";
}
}
echo "</tr>";
}
?>
0x05 其他常用函数
mysqli_real_escape_string()
转义用于SQL语句中的特殊字符防止SQL语句出错
string mysqli_real_escape_string ( mysqli $link , string $escapestr );
还没有评论,来说两句吧...