PHPはSQL注入防止を簡単に実現する方法

3364 ワード

この例では,PHPがSQL注入防止を簡単に実現する方法について述べる.皆さんの参考にしてください.具体的には以下の通りです.
方法1:execute代入パラメータ

 $var_Value) {
    //  POST     
    $num = $num + 1;
  }
  //   i         id,    j             
  for($i=0;$isetAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      //           ID   
      //    prepare()  ,                ,        ?     ,         
      $stmt = $pdo->prepare("select good_id from delphi_test_content WHERE good_id = ?");
      //     execute() ,                ,        ,     ,SQL         。
      $stmt->execute(array($_POST[$i]));
      //      
      $count = $stmt->rowCount();
      //            ID     ,         
      if($count != 0)
      {
        $stmt = $pdo->prepare("update delphi_test_content set content = ? WHERE good_id = ?");
        $stmt->execute(array($_POST[$j], $_POST[$i]));
      }
      //            ID     ,       
      if($count == 0)
      {
        $stmt = $pdo->prepare("insert into delphi_test_content (good_id,content) values (?,?)");
        $stmt->execute(array($_POST[$i], $_POST[$j]));
      }
    }
  }
  $pdo = null;
  //    
}
?>


方法2:bindParamバインドパラメータ

 $var_Value) {
    //  POST     
    $num = $num + 1;
  }
  //   i         id,    j             
  for($i=0;$iprepare("select good_id from delphi_test_content WHERE good_id = ?");
      $stmt->execute(array($_POST[$i]));
      $stmt->bindParam(1,$_POST[$i]);
      $stmt->execute();
      //      
      $count = $stmt->rowCount();
      //            ID     ,         
      if($count != 0)
      {
        $stmt = $pdo->prepare("update delphi_test_content set content = ? WHERE good_id = ?");
        $stmt->execute(array($_POST[$j], $_POST[$i]));
        $stmt->bindParam(1,$_POST[$j]);
        $stmt->bindParam(2,$_POST[$i]);
        $stmt->execute();
      }
      //            ID     ,       
      if($count == 0)
      {
        $stmt = $pdo->prepare("insert into delphi_test_content (good_id,content) values (?,?)");
        $stmt->bindParam(1,$_POST[$i]);
        $stmt->bindParam(2,$_POST[$j]);
        $stmt->execute();
      }
    }
  }
  $pdo = null;
  //    
}
?>


PHPに関する詳細について興味のある読者は、「phpプログラミングセキュリティチュートリアル」、「phpセキュリティフィルタリングテクニック総括」、「PHP演算と演算子用法総括」、「PHP基本文法入門チュートリアル」、「phpオブジェクト向けプログラム設計入門チュートリアル」、「php文字列(string)用法総括」、「php+mysqlデータベース操作入門チュートリアル」を参照してください.および「php一般データベース操作テクニック要約」
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.