간단하고 실용적인 PHP 작업 mysql 데이터베이스 class_php 기술

WBOY
풀어 주다: 2016-05-16 20:28:52
원래의
876명이 탐색했습니다.

이 기사의 예에서는 mysql 데이터베이스를 작동하기 위한 간단하고 실용적인 PHP 클래스를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 내용은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

/*
이 데이터베이스 연결 클래스는 SQL 주입 방지 기능을 자동으로 로드하고, 일부 민감한 SQL 쿼리 키워드를 필터링하며, 데이터베이스의 모든 테이블 이름을 얻기 위해 표시 테이블 상태 및 표시 테이블 클래스의 특성과 같은 판단 필드를 추가할 수도 있습니다. . */
@ini_set('mysql.trace_mode','off')
클래스 mysql
{
공개 $dblink
공개 $pconnect
개인 $search = array('/union(s*(/*.**/)?s*) select/i', '/load_file(s*(/*.**/)?s*) (/i ', '/into(s*(/*.**/)?s*) 출력파일/i')
private $replace = array('union select', 'load_file (', 'outfile로');
비공개 $rs

함수 __construct($hostname,$username,$userpwd,$database,$pconnect=false,$charset='utf8')
{
정의('allowed_htmltags', '<meta>



;

  1. 간단하고 실용적인 PHP 작업 mysql 데이터베이스 class_php 기술
    '); $this->pconnect=$pconnect
    $this->dblink=$pconnect?mysql_pconnect($hostname,$username,$userpwd):mysql_connect($hostname,$username,$userpwd)
    (!$this->dblink||!is_resource($this->dblink)) && fatal_error("데이터베이스 연결에 실패했습니다!"); @mysql_unbuffered_query("세트 이름 {$charset}"); if($this->version()>'5.0.1')
    {
    @mysql_unbuffered_query("set sql_mode = ''")
    }
    @mysql_select_db($database) or fatal_error("테이블을 선택할 수 없습니다!")
    $this->dblink 반환
    }

    함수 쿼리($sql,$unbuffered=false)
    {
    //에코 $sql.'
    '; $this->rs=$unbuffered?mysql_unbuffered_query($sql,$this->dblink):mysql_query($sql,$this->dblink)
    //(!$this->rs||!is_resource($this->rs)) && fatal_error("쿼리 실행에 실패했습니다! error:".mysql_error()); if(!$this->rs)fatal_error('SQL 문 '.$sql.'을 실행하는 동안 다음 오류가 발생했습니다.'.mysql_error()); $this->rs 반환
    }

    함수 fetch_one($sql)
    {
    $this->rs=$this->query($sql)
    dircms_strips 튜토리얼 속눈썹 반환($this->filter_pass(mysql_fetch_array($this->rs,mysql_assoc))); }

    function get_maxfield($filed='id',$table) // $table 테이블에 있는 $filed 필드의 최대값을 가져옵니다.
    {
    $r=$this->fetch_one("`{$table}` 순서로 `{$table}`에서 {$table}.{$filed}를 선택하세요.`{$filed}` 설명 제한 0,1") ;
    $r[$filed] 반환
    }

    함수 fetch_all($sql)
    {
    $this->rs=$this->query($sql)
    $결과=배열()
    while($rows=mysql_fetch_array($this->rs,mysql_assoc))
    {
    $결과[]=$행
    }

    mysql_free_result($this->rs)
    dircms_stripslashes($this->filter_pass($result))
    를 반환합니다. }

    함수 fetch_all_withkey($sql,$key='id')
    {
    $this->rs=$this->query($sql)
    $결과=배열()
    while($rows=mysql_fetch_array($this->rs,mysql_assoc))
    {
    $result[$rows[$key]]=$행
    }

    mysql_free_result($this->rs)
    dircms_stripslashes($this->filter_pass($result))
    를 반환합니다. }

    함수 last_insert_id()
    {
    if(($insertid=mysql_insert_id($this->dblink))>0)return $insertid
    else //auto_increment의 열 유형이 bigint이면 mysql_insert_id()가 반환하는 값이 올바르지 않습니다.
    {
    $result=$this->fetch_one('last_insert_id()를 삽입 ID로 선택하세요'); $result['insertid'] 반환
    }
    }

    함수 삽입($tbname,$varray,$replace=false)
    {
    $varray=$this->escape($varray)
    $tb_fields=$this->get_fields($tbname); //업그레이드하고 필드 존재 여부를 확인하는 함수를 추가합니다

      foreach($varray as $key => $value)
      {
       if(in_array($key,$tb_fields))
       {
        $fileds[]='`'.$key.'`';
        $values[]=is_string($value)?'''.$value.''':$value;
       }
      }
     
      if($fileds)
      {
       $fileds=implode(',',$fileds);
       $fileds=str_replace(''','`',$fileds);
       $values=implode(',',$values);
       $sql=$replace?"{$tbname}({$fileds}) 값({$values})으로 교체":"{$tbname}({$fileds}) 값({$values})에 삽입";
       $this->query($sql,true);
       return $this->last_insert_id();
      }
      그렇지 않으면 false를 반환합니다.
     }
     
     함수 업데이트($tbname, $array, $where = '')
     {
      $array=$this->escape($array);
      if($어디)
      {
       $tb_fields=$this->get_fields($tbname); // 增加判断字段是否存재
       
       $sql = '';
       foreach($k=>$v로 $array)
       {
        if(in_array($k,$tb_fields))
        {
         $k=str_replace(''','',$k);
         $sql .= ", `$k`='$v'";
        }
       }
       $sql = substr($sql, 1);
       
       if($sql)$sql = "`$tbname` 업데이트 $sql 여기서 $where 설정";
       그렇지 않으면 true를 반환합니다.
      }
      그렇지 않으면
      {
       $sql = "`$tbname`(`".implode('`,`', array_keys($array))."`) 값('".implode("','", $array)으로 교체합니다." ')";
      }
      return $this->query($sql,true);
     }
     
     함수 mysql_delete($tbname,$idarray,$filedname='id')
     {
      $idwhere=is_array($idarray)?implode(',',$idarray):intval($idarray);
      $where=is_array($idarray)?"{$tbname}.{$filedname} in ({$idwhere})":" {$tbname}.{$filedname}={$idwhere}";
     
      return $this->query("{$where}가 있는 {$tbname}에서 삭제",true);
     }
     
     함수 get_fields($table)
     {
      $필드=배열();
      $result=$this->fetch_all("`{$table}`의 열 표시");
      foreach($result는 $val로 표시됨)
      {
       $fields[]=$val['필드'];
      }
      $필드를 반환합니다.
     }
     
     함수 get_table_status($database)
     {
      $상태=배열();
      $r=$this->fetch_all("`".$database의 테이블 상태를 표시합니다."`"); /////// 테이블 상태 표시 的性质与테이블 표시类似,不过,可以提供每个表的大weight信息。
      foreach($r을 $v로)
      {
       $상태[]=$v;
      }
      $상태를 반환합니다.
     }
     
     함수 get_one_table_status($table)
     {
      return $this->fetch_one("'$table'과 같은 테이블 상태 표시");
     }
     
     function create_fields($tbname,$fieldname,$size=0,$type='varchar') // 2010-5-14 修正一下
     {  
      if($size)
      {
       $size=strtoupper($type)=='varchar'?$size:8;
       $this->query("alter table `{$tbname}` add `$fieldname` {$type}( {$size} )  not null",true);
      }
      else $this->query("alter table `{$tbname}` add `$fieldname`mediumtext not null",true);
      사실을 반환;
     }
     
     function get_tables() //获取所有表表name
     {
      $테이블=배열();
      $r=$this->fetch_all("테이블 표시");
      foreach($r을 $v로)
      {
       foreach($v를 $v_로)
       {
        $테이블[]=$v_;
       }
      }
      $테이블을 반환합니다.
     }
     
     function create_model_table($tbname) //创建一个内容模型表(start:初始只有字段contentid int(20),사용于内容表,//////////////////// /// 업데이트:2010-5-20     默认加入`content` mediatext not null,字段)
     {
      if(in_array($tbname,$this->get_tables())) return false;  //////////////////// 当表name已经存在时,返回 false
      if($this->query("`{$tbname}` 테이블 생성(
    `contentid`mediumint(8) null이 아님,
    `content` mediatext는 null이 아닙니다.
    키( `contentid` ) 
    ) 엔진 = myisam 기본 charset=utf8",true)) true를 반환합니다. ///////////////////// 성공하면 true를 반환합니다.
    false 반환 /////////////실패 시 false 반환
    }

    function create_table($tbname) //멤버 모델의 빈 테이블 생성(초기에는 userid int(20) 필드만 멤버 테이블에 사용됨, 2010-4-26)
    {
    if(in_array($tbname,$this->get_tables())) return false
    if($this->query("`{$tbname}` 테이블 생성(
    `userid` mediaint(8) null이 아님,
    키( `userid` )
    ) 엔진 = myisam 기본 charset=utf8",true)) true를 반환합니다.
    거짓을 반환
    }

    function escape($str) // 위험한 문자 필터링
    {
    if(!is_array($str)) return str_replace(array('n', 'r'), array(chr(10), chr(13)),mysql_real_escape_string(preg_replace($this->search,$this- >교체, $str), $this->dblink))
    foreach($str as $key=>$val) $str[$key] = $this->escape($val)
    $str 반환
    }

    function filter_pass($string, $allowedtags = '', $disabledattributes = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', ' onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy' , 'oncut', 'ondataavaible', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragdrop', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', ' ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterupdate', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup' , 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmoveout', 'onmouseotutorialver', 'onmouseup', 'onmousewheel', 'onmove' , ' onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowexit', 'onrowsdelete', 'onrowsinserted', ' onscroll' , 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload'))
    {
    if(is_array($string))
    {
    foreach($string as $key => $val) $string[$key] = $this->filter_pass($val, allowed_htmltags)
    }
    그렇지 않으면
    {
    $string = preg_replace('/s('.implode('|', $disabledattributes).').*?([s>])/', ' ', preg_replace('/<(.*?) > ;/ie', "'<'.preg_replace(array('/웹 페이지 효과:[^"']*/i', '/(".implode('|', $disabledattributes).")[ ] *=[ ]*["'][^"']*["']/i', '/s /'), array('', '', ' '), 스트립슬래시(' ')) . ' >'", Strip_tags($string, $allowedtags)));
    }
    $string 반환
    }

    함수 drop_table($tbname)
    {
    Return $this->query("`{$tbname}`이 있으면 테이블 삭제",true); }

    함수 버전()
    {
    return mysql_get_server_info($this->dblink)
    }
    }

    이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!