PHP アンチ SQL インジェクション クラス (PHP PDO は SQL インジェクション クラスを防止します)

WBOY
リリース: 2016-07-25 08:52:02
オリジナル
1123 人が閲覧しました
  1. class Model{

  2. protected $tableName="";//テーブル名
  3. protected $pOb;//pdo クラス オブジェクト
  4. function __construct(){
  5. $pdo=新しい PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USERNAME,DB_PASSWORD);
  6. $pdo->exec("set names ".DB_CHARSET); pdo;
  7. }
  8. /*
  9. * 関数: 増加
  10. * パラメーター: array $arr exp:array('フィールド名'=>値,'フィールド名'=>値,....)
  11. * 戻り値: int|false
  12. */
  13. function add($arr){
  14. //SQL ステートメントを綴る
  15. $kArr=array_keys($arr);
  16. $kStr=join(",",$kArr); $arr);

  17. $pStr = '';

  18. foreach ($vArr as $s=>$y){
  19. $vname = "p".$s; =':'.$vname.',';
  20. }
  21. $pStr = substr($pStr,0,-1);

  22. $sql = "{$this-> に挿入;tableName}($kStr) value($pStr)";

  23. print_r($sql);

  24. $pdoS = $this->pOb ->prepare($sql);
  25. foreach ($vArr as $k=>$y){
  26. $vname = "p".$k;
  27. var_dump($vname,$$vname); bindParam(":".$vname, $$vname,PDO::PARAM_STR);

  28. }

  29. $re = $pdoS ->execute(); //正常に追加されました
  30. //主キー ID 値を返します
  31. return $this->pOb->lastInsertId();
  32. //戻り値
  33. return $re
  34. }
  35. public function delete($arrWhere){
  36. if(!empty($arrWhere)){
  37. $strW = " where ";
  38. foreach($arrWhere as $kW=>$vW){
  39. $kn = str_replace(":", "", $kW) ;
  40. if(count($arrWhere)==1){
  41. $strW .= $kn."=".$kW;
  42. }else{
  43. $strW .= $kn."=".$kW." " ;
  44. }
  45. }
  46. if(count($arrWhere)>1){
  47. $strW .= " 1=1 ";
  48. }
  49. }
  50. $sql = "{$this->tableName} から削除" . $strW;
  51. $pdoS = $this->pOb->prepare($sql);
  52. foreach ($kW=>$vW){
  53. $kn = str_replace ( ":", "", $kW);
  54. $$kn = $vW;
  55. if(is_int($vW)){
  56. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT) ;
  57. }else if(is_float($vW)){
  58. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
  59. }else{
  60. $pdoS->bindParam($kW,$) $ kn,PDO::PARAM_STR);
  61. }
  62. }
  63. $re=$pdoS->execute();
  64. if($re){
  65. }else {
  66. return false; function update($arrSet,$arrWhere){
  67. //SQL ステートメントを書きます
  68. $str = ""
  69. $n=0;
  70. foreach ($arrSet as $kS=>$vS){

  71. < ;p>$str .= ",".$kS."=:p".$n++;
  72. }
  73. $str = substr($str, 1)
  74. foreach($kW=>$ vW ){
  75. $kn=str_replace(":","",$kW);
  76. if(count($arrWhere)==1){
  77. $strW .= $kn."=".$kW
  78. } else {
  79. $strW .= $kn."=".$kW." および ";
  80. }
  81. }
  82. if(count($arrWhere)>1){
  83. $strW .= " 1=1 "; }

  84. $sql="update {$this->tableName} set {$str} where ".$strW;

  85. < ;p>$pdoS=$this->pOb->prepare($sql);
  86. $x = 0;
  87. foreach($arrSet as $kS=>
  88. <) ; p>$kS = ":p".$x++
  89. $$kS = $vS;

  90. if(is_int($vS)){

  91. $pdoS->bindParam($) kS ,$$kS,PDO::PARAM_INT);
  92. }else if(is_float($vS)){
  93. $pdoS->bindParam($kS,$$kS,PDO::PARAM_INT); $ pdoS->bindParam($kS,$$kS,PDO::PARAM_STR);
  94. }
  95. }

  96. foreach($arrWhere as $kW=>$vW){
  97. $ kn=str_replace(":","",$kW);
  98. $$kn=$vW;//$p0 $p1 $p2
  99. if(is_int($vW)){
  100. $pdoS->bindParam( $ kW,$$kn,PDO::PARAM_INT);
  101. }else if(is_float($vW)){
  102. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
  103. $pdoS->bindParam($kW,$$kn,PDO::PARAM_STR);
  104. }
  105. }
  106. $re=$pdoS->execute(){
  107. return true;< ; /p>
  108. }else{

  109. return false
  110. }

  111. }

  112. //Check
  113. function select($field="*",$ArrayWhere="", $ order="",$limit=""){
  114. if(!empty($ArrayWhere)){
  115. $strW = " where ";
  116. foreach($ArrayWhere as $kW=>$vW){
  117. $kn = str_replace(":","",$kW);
  118. if(count($ArrayWhere)==1){
  119. $strW .= $kn."=".$kW;

  120. < p> ;}else{
  121. $strW .= $kn."=".$kW." and ";
  122. }
  123. }
  124. if(count($ArrayWhere)>1){
  125. $strW .= " 1=1 " ;
  126. }
  127. }
  128. if(!empty($order)){
  129. $order="order by ".$order;
  130. }
  131. if(!empty($limit)){
  132. $limit="リミット ".$limit;
  133. }
  134. //select 字段列表 from 表名 ここで、条件は字段 desc|asc limit start,length によって順序付けされます。
  135. $sql="{$this->tableName} {$strW} {$order} {$limit} から {$field} を選択します";
  136. //print_r($sql);
  137. $pdoS=$this->pOb->prepare($sql);
  138. if(!empty($ArrayWhere)){
  139. foreach($ArrayWhere as $kW=>$vW){
  140. $kn=str_replace(":","",$kW);
  141. $$kn=$vW;
  142. if(is_int($vW)){
  143. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
  144. }else if(is_float($vW)){
  145. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
  146. }else{
  147. $pdoS->bindParam($kW,$$kn,PDO::PARAM_STR);
  148. }
  149. }
  150. }
  151. $re=$pdoS->execute();
  152. if($re){
  153. $pdoS->setFetchMode(PDO::FETCH_ASSOC);
  154. return $pdoS->fetchAll();
  155. }else {
  156. false を返す;
  157. }
  158. }
  159. }

复制發


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート