使用PDO防禦sql注入

使用轉移函數或者黑名單都還是有一定的風險,防禦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 "登陸信息錯誤";
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章