前言
当我们需要编写一个根据用户输入进行查询反馈的网页时,首先是如何构建一个能够满足用户查询要求的SQL语句;其次,则需要考虑如何防御SQL注入。
如何防御SQL注入关系到整个数据库,乃至服务器的安全,所以是一个不用忽视的问题,也是这篇文章所要论述的重点。
文章接下来的讲述将会以PHP + MySQL的组合进行举例说明。
利用字符串构造SQL语句
很多同学在初次编写调用数据库相关的程序时,第一直觉采用的就是利用字符串拼接的方法来构造SQL语句。
这个方法相当简单粗暴,请看下面的两个例子:
例子1:
$search = $_GET['search'];
$query = ("select * from books where name = '$search'");
$result = mysqli_query($link,$query);
例子2
$search = $_GET['search'];
$query = ("select * from books where name = '" . "$search" . "'");
$result = mysqli_query($link,$query);
以上的两种例子都是通过字符串先构建一个SQL查询语句,再通过拼接传入的参数构造成一个完整的SQL语句。
这样的方法之所以说是简单粗暴:简单在这个方法只是基于基本的字符串拼接操作;粗暴在采用字符串拼接的方法对SQL注入的防御能力几乎为零。</