$sql = "SELECT * FROM `table1` WHERE username='{$username}'";
if ($result = $mysqli->query( $sql )) {
printf("Select returned %d rows.\n", $result->num_rows);
while ($row = $result->fetch_array(MYSQLI_ASSOC))
{
var_dump($row);//打印结果
}
/* free result set */
$result->close();
} else {
var_dump($mysqli->error);
}
$mysqli->close();
复制代码
2.2创建MySQL
先在MySQL中创建表,再在表中创建字段,在其中一个字段当中,创建一个值。
2.3初步访问
通过127.0.0.1/demo.php进行查询,表现“Select returned 0 rows.”。表现没有传参,后面加入?usemame=admin进行传参。然后,我们访问http://localhost/test.php?username=admin%c2,即可发现%c2被忽略,Mysql查出了username=admin的结果。进入后的结果:说明已经绕过。
2.4从题目,探求缘故起因
造成这个Trick的根本缘故起因是,Mysql字段的字符集和php mysqli客户端设置的字符集不雷同。set names utf8 的意思是将客户端的字符集设置为utf8。我们打开mysql控制台,依次执行SHOW VARIABLES LIKE 'character_set_%';、set names utf8;、SHOW VARIABLES LIKE 'character_set_%';,即可得到如下结果: