使用轉移函數或者黑名單都還是有一定的風險,防禦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 "登陸信息錯誤";
}