PHP数据操作种
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;
?

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











많은 사용자들이 스마트 시계를 선택할 때 Huawei 브랜드를 선택하게 됩니다. 그 중 Huawei GT3pro와 GT4가 가장 인기 있는 선택입니다. 두 제품의 차이점을 궁금해하는 사용자가 많습니다. Huawei GT3pro와 GT4의 차이점은 무엇입니까? 1. 외관 GT4: 46mm와 41mm, 재질은 유리 거울 + 스테인레스 스틸 본체 + 고해상도 섬유 후면 쉘입니다. GT3pro: 46.6mm 및 42.9mm, 재질은 사파이어 유리 + 티타늄 본체/세라믹 본체 + 세라믹 백 쉘입니다. 2. 건강한 GT4: 최신 Huawei Truseen5.5+ 알고리즘을 사용하면 결과가 더 정확해집니다. GT3pro: ECG 심전도, 혈관 및 안전성 추가

C 언어에서 return의 사용법은 다음과 같습니다. 1. 반환 값 유형이 void인 함수의 경우 return 문을 사용하여 함수 실행을 조기에 종료할 수 있습니다. 2. 반환 값 유형이 void가 아닌 함수의 경우 return 문은 함수 실행을 종료하는 것입니다. 결과는 호출자에게 반환됩니다. 3. 함수 실행을 조기에 종료합니다. 함수 내부에서는 return 문을 사용하여 함수 실행을 조기에 종료할 수 있습니다. 함수가 값을 반환하지 않는 경우.

Windows 11에서 캡처 도구가 작동하지 않는 이유 문제의 근본 원인을 이해하면 올바른 솔루션을 찾는 데 도움이 될 수 있습니다. 캡처 도구가 제대로 작동하지 않는 주요 이유는 다음과 같습니다. 초점 도우미가 켜져 있습니다. 이렇게 하면 캡처 도구가 열리지 않습니다. 손상된 응용 프로그램: 캡처 도구가 실행 시 충돌하는 경우 응용 프로그램이 손상되었을 수 있습니다. 오래된 그래픽 드라이버: 호환되지 않는 드라이버가 캡처 도구를 방해할 수 있습니다. 다른 응용 프로그램의 간섭: 실행 중인 다른 응용 프로그램이 캡처 도구와 충돌할 수 있습니다. 인증서가 만료되었습니다. 업그레이드 프로세스 중 오류로 인해 이 문제가 발생할 수 있습니다. 이 문제는 대부분의 사용자에게 적합하며 특별한 기술 지식이 필요하지 않습니다. 1. Windows 및 Microsoft Store 앱 업데이트

소스 코드: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}# 출력 위 코드의 출력은 간단히 결론을 내릴 수 있습니다. return은 finally 전에 실행됩니다. 바이트코드 수준에서 무슨 일이 일어나는지 살펴보겠습니다. 다음은 case1 메소드의 바이트코드 일부를 가로채서 소스 코드를 비교하여 각 명령어의 의미를 주석으로 표시합니다.

1부: 초기 문제 해결 단계 Apple 시스템 상태 확인: 복잡한 솔루션을 살펴보기 전에 기본 사항부터 시작해 보겠습니다. 문제는 귀하의 기기에 있는 것이 아닐 수도 있습니다. Apple 서버가 다운되었을 수도 있습니다. Apple의 시스템 상태 페이지를 방문하여 AppStore가 제대로 작동하는지 확인하세요. 문제가 있는 경우 Apple이 문제를 해결하기를 기다리는 것뿐입니다. 인터넷 연결 확인: "AppStore에 연결할 수 없음" 문제는 때때로 연결 불량으로 인해 발생할 수 있으므로 인터넷 연결이 안정적인지 확인하십시오. Wi-Fi와 모바일 데이터 간을 전환하거나 네트워크 설정을 재설정해 보세요(일반 > 재설정 > 네트워크 설정 재설정 > 설정). iOS 버전을 업데이트하세요.

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Vue3.2 설정 구문 설탕은 Vue3.0의 번거로운 설정을 해결하기 위해 단일 파일 구성 요소(SFC)에서 결합된 API를 사용하는 컴파일 타임 구문 설탕입니다. 사용 중 문제점 1. 사용 중에 import로 도입된 선언된 변수, 함수 및 컨텐츠를 반환할 필요가 없습니다. //소개된 컨텐츠 가져오기 import{getToday. }from'./utils'//변수 constmsg='안녕하세요!'//함수 func

심층 분석: 링크와 가져오기의 차이점은 무엇입니까? 웹 페이지나 애플리케이션을 개발할 때 코드를 향상하거나 사용자 정의하기 위해 외부 CSS 파일이나 JavaScript 라이브러리를 도입해야 하는 경우가 많습니다. 이 과정에서 일반적으로 사용되는 두 가지 방법은 링크와 가져오기입니다. 외부 리소스를 도입하는 것이 목적이지만 구체적인 사용법에는 약간의 차이가 있습니다. 구문 및 위치: link: link 태그를 사용하여 외부 리소스를 HTML 파일에 연결합니다. 일반적으로 HTML 문서의 헤드에 위치합니다.
