찾다

PHP数据操作类

<?php

/**

+----------------------

 * Mysql操作类

+----------------------

 * 文件名称  Db.class.php

+----------------------

 * 文件描述  mysql操作类

+----------------------

 */

class Db{

    //数据库连接标识

    protected $link = null;

    //当前操作的表

    public $table = '';

    //查询参数

    protected $options = array();

    //当前执行的SQL语句

    protected $sql = '';

    //用什么编码传递数据

    protected $dbCharset = 'utf8';



    //缓存路径

    protected $cachePath = './cache/';

    //缓存扩展名

    protected $cacheFileExt = "php";

    //缓存文件名

    protected $cacheFileName;

    //是否缓存

    protected $cache = false;

    //缓存更新时间秒数

    protected $cacheLimitTime = 60;



    //数据返回类型, 1代表数组, 2代表对象

    protected $returnType = 1;



  /*

   * 根据当前动态文件生成缓存文件名

   */

	function setCacheFileName($fileName) {

		$cacheFileName = $this->cachePath . strtoupper(md5($fileName)).".".$this->cacheFileExt;

		$this->cacheFileName=$cacheFileName;

    }

  /*

   * 根据当前动态文件生成缓存文件名

   */

	function getCacheFileName() {

		return  $this->cacheFileName;

    }

    /**

     * 连接数据库

     *

     * @access      public

     * @param       array    $db  数据库配置

     * @return      resource 数据库连接标识

     */

    public function connect($db){

        //根据配置使用不同函数连接数据库

        $db['host'] = isset($db['port']) ? $db['host'].':'.$db['port']: $db['host'];

        $db['char'] = isset($db['char']) ? $db['char']: $this->dbCharset;

        $func = $db['pconnect'] ? 'mysql_pconnect' : 'mysql_connect';

        $this->link = $func($db['host'], $db['user'], $db['pwd']);

        mysql_select_db($db['database'], $this->link);

        mysql_query("SET NAMES '{$db['char']}'");

        $this->cachePath = isset($db['cachepath']) ? $db['cachepath']: $this->cachePath;

        return $this->link;

    }

    /**

     * 查询符合条件的一条记录

     *

     * @access      public

     * @param       string    $where  查询条件

     * @param       string    $field  查询字段

     * @param       string    $table  表

     * @return      mixed             符合条件的记录

     */

    public function find($where = NULL, $field = '*', $table = ''){

        return $this->findAll($where = NULL, $field = '*', $table = '', FALSE);

    }

    /**

     * 查询符合条件的所有记录

     *

     * @access      public

     * @param       string    $where  查询条件

     * @param       string    $field  查询字段

     * @param       string    $table  表

     * @return      mixed             符合条件的记录

     */

    public function findAll($where = NULL, $field = '*', $table = '', $all = TRUE){

        $this->options['where'] = is_null($where) ? @$this->options['where']: $where;

        $this->options['field'] = isset($this->options['field']) ? $this->options['field']: $field;

        $this->options['table'] = $table == '' ? $this->table: $table;

        $sql = "SELECT {$this->options['field']} FROM `{$this->options['table']}` ";

        $sql .= isset($this->options['join']) ? ' LEFT JOIN '.$this->options['join']: '';

        $sql .= isset($this->options['where']) ? ' WHERE '.$this->options['where']: '';

        $sql .= isset($this->options['group']) ? ' GROUP BY '.$this->options['group']: '';

        $sql .= isset($this->options['having']) ? ' HAVING '.$this->options['having']: '';

        $sql .= isset($this->options['order']) ? ' ORDER BY '.$this->options['order']: '';

        $sql .= isset($this->options['limit']) ? ' LIMIT '.$this->options['limit']: '';

        $this->sql = $sql;

        $row = NULL;

        //如果开启了缓存, 那么重缓存中获取数据

        if ($this->cache === TRUE){

			$this->setCacheFileName($this->sql);

            $row = $this->readCache();

        }

        //如果读取失败, 或则没有开启缓存

        if (is_null($row)){

            $result = $this->query();

            $row = $all === TRUE ? $this->fetchAll($result): $this->fetch($result);

            //如果开启了缓存, 那么就写入

            if ($this->cache === TRUE){

                $this->writeCache($row);

            }

            $this->options = array();

        }

        return $row;

    }

    /**

     * 读取结果集中的所有记录到数组中

     *

     * @access public

     * @param  resource  $result  结果集

     * @return array

     */

    public function fetchAll($result = NULL){

        $rows = array();

        while ($row = $this->fetch($result)){

            $rows[] = $row;

        }

        return $rows;

    }

    /**

     * 读取结果集中的一行记录到数组中

     *

     * @access public

     * @param  resource  $result  结果集

     * @param  int       $type    返回类型, 1为数组, 2为对象

     * @return mixed              根据返回类型返回

     */

    public function fetch($result = NULL, $type = NULL){

        $result = is_null($result) ? $this->result: $result;

        $type = is_null($type) ? $this->returnType: $type;

        $func = $type === 1 ? 'mysql_fetch_assoc' : 'mysql_fetch_object';

        return $func($result);

    }

    /**

     * 执行SQL命令

     *

     * @access      public

     * @param       string    $sql    SQL命令

     * @param       resource  $link   数据库连接标识

     * @return      mixed             数据库结果集

     */

    public function query($sql = '', $link = NULL){

        $sql = empty($sql) ? $this->sql: $sql;

        $link = is_null($link) ? $this->link: $link;

        $this->result = mysql_query($sql, $link);

        if (is_resource($this->result)){

            return $this->result;

        }

        //如果执行SQL出现错误, 那么抛出异常

        exit('<strong>Mysql error:</strong>'.$this->getError());

    }

    /**

     * 执行SQL命令

     *

     * @access      public

     * @param       string    $sql    SQL命令

     * @param       resource  $link   数据库连接标识

     * @return      bool              是否执行成功

     */

    public function execute($sql = '', $link = NULL){

        $sql = empty($sql) ? $this->sql: $sql;

        $link = is_null($link) ? $this->link: $link;

        if (mysql_query($sql, $link)){

            return TRUE;

        }

        return FALSE;

    }

    /**

     * 插入记录

     *

     * @access public

     * @param  array  $data  插入的记录, 格式:array('字段名'=>'值', '字段名'=>'值');

     * @param  string $table 表名

     * @return bool          当前记录id

     */

    public function add($data, $table = NULL){

        $table = is_null($table) ? $this->table: $table;

        $sql = "INSERT INTO `{$table}`";

        $fields = $values = array();

        $field = $value = '';

        //遍历记录, 格式化字段名称与值

        foreach($data as $key => $val){

            $fields[] = "`{$table}`.`{$key}`";

            $values[] = is_numeric($val) ? $val : "'{$val}'";

        }

        $field = join(',', $fields);

        $value = join(',', $values);

        unset($fields, $values);

        $sql .= "({$field}) VALUES({$value})";

        $this->sql = $sql;

        $this->execute();

        return $this->insertId();

    }

    /**

     * 删除记录

     *

     * @access public

     * @param  string  $where  条件

     * @param  string  $table  表名

     * @return bool            影响行数

     */

    public function delete($where = NULL, $table = NULL){

        $table = is_null($table) ? $this->table: $table;

        $where = is_null($where) ? @$this->options['where']: $where;

        $sql = "DELETE FROM `{$table}` WHERE {$where}";

        $this->sql = $sql;

        $this->execute();

        return $this->affectedRows();

    }

    /**

     * 更新记录

     *

     * @access public

     * @param  array   $data   更新的数据 格式:array('字段名' => 值);

     * @param  string  $where  更新条件

     * @param  string  $table  表名

     * @return bool            影响多少条信息

     */

    public function update($data, $where = NULL, $table = NULL){

        $table = is_null($table) ? $this->table: $table;

        $where = is_null($where) ? @$this->options['where']: $where;

        $sql = "UPDATE `{$table}` SET ";

        $values = array();

        foreach($data as $key => $val){

            $val = is_numeric($val) ? $val : "'{$val}'";

            $values[] = "`{$table}`.`{$key}` = {$val}";

        }

        $value = join(',', $values);

        $this->sql = $sql.$value." WHERE {$where}";

        $this->execute();

        return $this->affectedRows();

    }

    /**

     * 读取缓存

     *

     * @access      public

     * @return      mixed   如果读取成功返回缓存内容, 否则返回NULL

     */

    protected function readCache(){

        $file = $this->getCacheFileName();

        if (file_exists($file)){

            //缓存过期

            if ((filemtime($file) + $this->cacheLimitTime) < time()){

                @unlink($file);

                return NULL;

            }

            if (1 === $this->returnType){

                $row = include $file;

            }

            else{

                $data = file_get_contents($file);

                $row = unserialize($data);

            }

            return $row;

        }

        return NULL;

    }

    /**

     * 写入缓存

     *

     * @access      public

     * @param       mixed   $data   缓存内容

     * @return      bool            是否写入成功

     */

    public function writeCache($data){

        $file = $this->getCacheFileName();

        if ($this->makeDir(dirname($file))){

            if (1 === $this->returnType){

				$data = '<?php return '.var_export($data, TRUE).';?>';

			}else{

				$data = serialize($data);

			}

		}

        return file_put_contents($file, $data);

    }

	/*

	 * 清除缓存文件

	 * string $fileName 指定文件名(含函数)或者all(全部)

	 * 返回:清除成功返回true,反之返回false

	 */

	function clearCache( $fileName = "all" ) {

		if( $fileName != "all" ) {

			if( file_exists( $fileName ) ) {

				return @unlink( $fileName );

			}else return false;

		}

		if ( is_dir( $this->cachePath ) ) {

			if ( $dir = @opendir( $this->cachePath ) ) {

				while ( $file = @readdir( $dir ) ) {

					$check = is_dir( $file );

					if ( !$check )

					@unlink( $this->cachePath . $file );

				}

				@closedir( $dir );

				return true;

			}else{

				return false;

			}

		}else{

		  return false;

		}

	}

	  /*

	   * 连续建目录

	   * string $dir 目录字符串

	   * int $mode   权限数字

	   * 返回:顺利创建或者全部已建返回true,其它方式返回false

	   */

	function makeDir( $dir, $mode = "0777" ) {

		if( ! $dir ) return 0;

		$dir = str_replace( "\\", "/", $dir );

		

		$mdir = "";

		foreach( explode( "/", $dir ) as $val ) {

			$mdir .= $val."/";

			if( $val == ".." || $val == "." || trim( $val ) == "" ) continue;

		  

			if( ! file_exists( $mdir ) ) {

				if(!@mkdir( $mdir, $mode )){

					return false;

				}

			}

		}

		return true;

	}

	//自动加载函数, 实现特殊操作

    public function __call($func, $args)

    {

         if(in_array($func, array('field', 'join', 'where', 'order', 'group', 'limit', 'having')))

         {

               $this->options[$func] = array_shift($args);

               return $this;

         } elseif($func === 'table'){

               $this->options['table'] = array_shift($args);

               $this->table            = $this->options['table'];

               return $this;

         }

        //如果函数不存在, 则抛出异常

         exit('Call to undefined method Db::' . $func . '()');

     }

//-------------------------------------------

        //返回上一次操作所影响的行数

    public function affectedRows($link = null){

		$link = is_null($link) ? $this->link : $link;

		return mysql_affected_rows($link);

    }



        //返回上一次操作记录的id

    public function insertId($link = null){

        $link = is_null($link) ? $this->link : $link;

        return mysql_insert_id($link);

    }



        //清空结果集

    public function free($result = null){

         $result = is_null($result) ? $this->result : $result;

         return mysql_free_result($result);

    }



        //返回错误信息

	public function getError($link = NULL){

        $link = is_null($link) ? $this->link : $link;

        return mysql_error($link);

    }



        //返回错误编号

	public function getErrno($link = NULL){

        $link = is_null($link) ? $this->link : $link;

        return mysql_errno($link);

    }

}

?>

?调用方法:

<?php

include ('DB.php');   //引入类文件

$db = new Db();    //实例化mysql操作类



//数据库配置信息数组

$config['host']     = 'localhost';   //mysql主机

$config['user']     = 'root';        //用户

$config['pwd']      = '';            //密码

$config['port']     = '3306';        //端口

$config['database'] = 'message';     //数据库

$config['char']     = 'utf8';        //字符集

$config['pconnect'] = FALSE;         //是否使用持久性连接



$link = $db->connect($config);  //传入配置, 连接数据库, $link为连接标识

$rows = $db->table('test')->field('*')->order('id DESC')->limit(0, 10)->findAll();

//上面的操作, 相当于执行SQL命令: SELECT * FROM test ORDER BY id DESC LIMIT 0, 10;



print_r($db->getCacheFileName());

//$db->clearCache($db->getCacheFileName());

//$db->clearCache();

// 执行的效果和上面相同, 但是多了一个cache方法,也就缓存了这次查询 cache()有三个参数, cache(缓存名称, 有效时间, 缓存路径); 缓存名称默认是使用md5(SQL命令)为名称, 有效时间默认为1分钟, 缓存路径可以在连接数据库时进行配置



//下面来插入一条记录

$data = array(

       'name'  => 'xiaokai',

       'pass'  => '123456',

);



$db->add($data);

// 这样就插入了一条记录 注意这里$data的格式为 array('字段名称1' => '值1', '字段名称2' => '值2', .....);

//相当于执行SQL命令: INSERT INTO test(`name`, `pass`) VALUES('xiaokai', '123456');

//朋友们可能奇怪了, add 函数并没有传入表名称啊, 为什么会执行这样的SQL命令呢?

//其实在上面查询的时候就已经使用$db->table('test')方法了, 这里已经传入了表名称, 所以在操作就不需要指定表名称了.



//有插入就有删除, 下面来删除

$db->delete('id = 10');

//这样就删除了test表中 id为10的记录

//相当于执行SQL命令: DELETE FROM test WHERE id = 10;

//这里也是一样没有传入表名称



//下面构造数组, 然后更新一条记录

$data = array(

       'name'  => '123456',

       'pass'  => 'xiaokai',

);

$db->update($data, 'id = 10');

//这样就将id为10的记录给更新了

//相当于执行SQL命令: UPDATE test set name = '123456', pass = 'xiaokai' WHERE id = 10; 

?

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

여전히 인기있는 것은 사용 편의성, 유연성 및 강력한 생태계입니다. 1) 사용 편의성과 간단한 구문은 초보자에게 첫 번째 선택입니다. 2) 웹 개발, HTTP 요청 및 데이터베이스와의 우수한 상호 작용과 밀접하게 통합되었습니다. 3) 거대한 생태계는 풍부한 도구와 라이브러리를 제공합니다. 4) 활성 커뮤니티와 오픈 소스 자연은 새로운 요구와 기술 동향에 맞게 조정됩니다.

PHP 및 Python : 유사점과 차이점을 탐구합니다PHP 및 Python : 유사점과 차이점을 탐구합니다Apr 19, 2025 am 12:21 AM

PHP와 Python은 웹 개발, 데이터 처리 및 자동화 작업에 널리 사용되는 고급 프로그래밍 언어입니다. 1.PHP는 종종 동적 웹 사이트 및 컨텐츠 관리 시스템을 구축하는 데 사용되며 Python은 종종 웹 프레임 워크 및 데이터 과학을 구축하는 데 사용됩니다. 2.PHP는 Echo를 사용하여 콘텐츠를 출력하고 Python은 인쇄를 사용합니다. 3. 객체 지향 프로그래밍을 지원하지만 구문과 키워드는 다릅니다. 4. PHP는 약한 유형 변환을 지원하는 반면, 파이썬은 더 엄격합니다. 5. PHP 성능 최적화에는 Opcache 및 비동기 프로그래밍 사용이 포함되며 Python은 Cprofile 및 비동기 프로그래밍을 사용합니다.

PHP와 Python : 다른 패러다임이 설명되었습니다PHP와 Python : 다른 패러다임이 설명되었습니다Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python : 그들의 역사에 깊은 다이빙PHP와 Python : 그들의 역사에 깊은 다이빙Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP와 Python 중에서 선택 : 가이드PHP와 Python 중에서 선택 : 가이드Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP 및 프레임 워크 : 언어 현대화PHP 및 프레임 워크 : 언어 현대화Apr 18, 2025 am 12:14 AM

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

PHP의 영향 : 웹 개발 및 그 이상PHP의 영향 : 웹 개발 및 그 이상Apr 18, 2025 am 12:10 AM

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?Apr 17, 2025 am 12:25 AM

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경