使用转移函数或者黑名单都还是有一定的风险,防御sql注入比较好的办法还是pdo,pdo不会将用户输入与sql语句拼接,从原理上防御了sql注入
//pdo防御sql注入
//某登陆页面部分代码
$dbh = new PDO("mysql:host=localhost;dbname=user;charset=utf8","root","root");//实例化pdo对象
//php5.3.6及以前版本中,并不支持在DSN中的charset定义,而应该使用set names ...
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);//禁止PHP本地转义而交由MySQL Server转义
$sql = "select * from admin where admin=? and password=?";
$stmt = $dbh->prepare($sql);//对请求mysql的sql语句用占位符的方式做预处理。该sql传入prepare函数后,预处理函数就会得到本次查询语句的sql模板类,并将这个模板类返回。
$stmt->bindParam(1,$_html['admin']);//绑定查询参数
$stmt->bindParam(2,$_html['password']);
$stmt->execute();//执行语句
$result = $stmt->fetchAll();//返回包含所有结果集行的数组
if(!!$result){
setcookie('login',md5($_rows['admin']));
$_SESSION['user']=md5($_rows['admin']);
header('location:index.php');
}else{
echo "登陆信息错误";
}