>  기사  >  백엔드 개발  >  PHP 안티 SQL 주입 클래스(php pdo는 SQL 주입 클래스를 방지합니다)

PHP 안티 SQL 주입 클래스(php pdo는 SQL 주입 클래스를 방지합니다)

WBOY
WBOY원래의
2016-07-25 08:52:021130검색
  1. 클래스 모델{

  2. 보호됨 $tableName="";//테이블 이름
  3. 보호됨 $pOb;//pdo 클래스 객체
  4. function __construct(){
  5. $pdo=new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USERNAME,DB_PASSWORD)
  6. $pdo->exec("세트 이름 ".DB_CHARSET);
  7. $this->pOb=$pdo;
  8. }
  9. /*
  10. * 함수: 증가
  11. * 매개변수: array $arr exp:array('필드 이름'=>값,'필드 이름'=>값,...)
  12. * return:int|false
  13. */
  14. 함수 add( $arr){
  15. //SQL 문 철자
  16. $kArr=array_keys($arr)
  17. $kStr=join(",",$kArr)
  18. $vArr=array_values($arr) );

  19. $pStr = ''

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

  25. print_r($sql)

  26. $pdoS = $this->pOb ->prepare($sql)
  27. foreach($vArr as $k=>$y){
  28. $vname = "p".$k; vname = $y
  29. var_dump($vname,$$vname)
  30. $pdoS ->
  31. }

  32. $re = $pdoS ->execute()
  33. if($re){//추가 성공
  34. //기본 키 ID 값 반환
  35. return $ this->pOb->lastInsertId();
  36. }
  37. //반환 값
  38. return $re
  39. }
  40. 공용 함수 delete($arrWhere){
  41. if( !empty($arrWhere)){
  42. $strW = " where ";
  43. foreach($arrWhere as $kW=>$vW){
  44. $kn = str_replace(":", " ", $kW);
  45. if(count($arrWhere)==1){
  46. $strW .= $kn."=".$kW;
  47. }else{
  48. $strW . = $ kn."=".$kW." 및 ";
  49. }
  50. }
  51. if(count($arrWhere)>1){
  52. $strW .= " 1=1 " ;
  53. }
  54. }
  55. $sql = "{$this->tableName}에서 삭제".$strW;
  56. print_r($sql)
  57. $pdoS = $this-> ;pOb ->prepare($sql);
  58. foreach($arrWhere as $kW=>$vW){
  59. $kn = str_replace(":", "", $kW); $$ kn = $vW;
  60. if(is_int($vW)){
  61. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT)
  62. }else if(is_float ($ vW)){
  63. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT)
  64. }else{
  65. $pdoS->bindParam($kW,$$ kn, PDO::PARAM_STR);
  66. }
  67. }
  68. $re=$pdoS->execute()
  69. if($re){
  70. return true; else {
  71. return false;
  72. }
  73. }
  74. function update($arrSet,$arrWhere){
  75. //SQL 문 철자
  76. $str = ""; n= 0;
  77. foreach($arrSet as $kS=>$vS){

  78. $str .= ",".$kS."=:p". $n ;

  79. }
  80. $str = substr($str, 1);
  81. foreach($arrWhere as $kW=>$vW){
  82. $kn=str_replace(":", "" ,$kW);
  83. if(count($arrWhere)==1){
  84. $strW .= $kn."=".$kW>}else{
  85. $strW .= $kn."=".$kW." 및 ";
  86. }
  87. }
  88. if(count($arrWhere)>1){
  89. $strW .= " 1=1 ";
  90. }

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

  92. //print_r($ sql) ;

  93. $pdoS=$this->pOb->prepare($sql)

  94. $x = 0
  95. foreach($arrSet as $ kS= >$vS){

  96. $kS = ":p".$x

  97. $$kS = $vS;

  98. < ;p> ;if(is_int($vS)){
  99. $pdoS->bindParam($kS,$$kS,PDO::PARAM_INT)
  100. }else if(is_float($vS)){
  101. $pdoS->bindParam($kS,$$kS,PDO::PARAM_INT)
  102. }else{
  103. $pdoS->bindParam($kS,$$kS,PDO::PARAM_STR) ;
  104. }
  105. }

  106. foreach($arrWhere as $kW=>$vW){
  107. $kn=str_replace(":", "" ,$kW);
  108. $$kn=$vW;//$p0 $p1 $p2
  109. if(is_int($vW)){
  110. $pdoS->bindParam($kW, $$ kn,PDO::PARAM_INT)
  111. }else if(is_float($vW)){
  112. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT)
  113. }else {
  114. $pdoS->bindParam($kW,$$kn,PDO::PARAM_STR)
  115. }
  116. }
  117. $re=$pdoS->execute(); 🎜> if($re){
  118. return true;

  119. }else{

  120. return false
  121. }

  122. //확인
  123. function select($field="*",$ArrayWhere="",$order="",$limit=""){
  124. if(!empty($ArrayWhere )) {
  125. $strW = " where ";
  126. foreach($ArrayWhere as $kW=>$vW){
  127. $kn=str_replace(":","",$kW); 🎜> if(count($ArrayWhere)==1){
  128. $strW .= $kn."=".$kW;

  129. }else{

  130. $ strW . = $kn."=".$kW." 및 ";
  131. }
  132. }
  133. if(count($ArrayWhere)>1){
  134. $strW .= " 1= 1 " ;
  135. }
  136. }
  137. if(!empty($order)){
  138. $order="order by ".$order;
  139. }
  140. if(!empty($limit)){
  141. $limit="limit ".$limit;
  142. }
  143. // 表name에서 字段列表를 선택합니다. 여기서 条件 순서는 字段 desc|asc 제한 시작, 길이입니다.
  144. $sql="{$this->tableName} {$strW} {$order} {$limit}에서 {$field} 선택";
  145. //print_r($sql);
  146. $pdoS=$this->pOb->prepare($sql);
  147. if(!empty($ArrayWhere)){
  148. foreach($ArrayWhere as $kW=>$vW){
  149. $kn=str_replace(":","",$kW);
  150. $$kn=$vW;
  151. if(is_int($vW)){
  152. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
  153. }else if(is_float($vW)){
  154. $pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
  155. }else{
  156. $pdoS->bindParam($kW,$$kn,PDO::PARAM_STR);
  157. }
  158. }
  159. }
  160. $re=$pdoS->execute();
  161. if($re){
  162. $pdoS->setFetchMode(PDO::FETCH_ASSOC);
  163. return $pdoS->fetchAll();
  164. }else {
  165. false를 반환합니다.
  166. }
  167. }
  168. }

复代码


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.