分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

PHP 基于PDO封装CURD,分页类封装

发布时间:2023-09-06 01:49责任编辑:胡小海关键词:PHP
<?phpclass mysql_pdo{ ???private $_host; ???private $_user; ???private $_pwd; ???private $_dbname; ???private $_pdo; ???private $_fields; ???private $_values; ???private $_array; ???private $curr_page = 1; ???private $count_page; ???private $each_page = 10; ???private $field_page = ‘*‘; ???private static $connection = null; ???private function __construct () ???{ ???????// 防止实例化 ???} ???/* ???????@@ 入口方法 ???????parameter null ???*/ ???public static function _interance () ???{ ???????// 由于本地$pwd为空所有不判断$pwd; ???????if (is_null(self::$connection)) self::$connection = new mysql_pdo(); ???????return self::$connection; ???} ???/* ???????@@ 设置连接属性 ???????parameter $host 127.0.0.1, $user root, $pwd null, $dbname eatble. ???*/ ???public function _setdata ($host, $user, $pwd, $dbname) ???{ ???????????$this->_host = $host; ???????????$this->_user = $user; ???????????$this->_pwd = $pwd; ???????????$this->_dbname = $dbname; ???????????$this->_connect(); ???} ???/* ???????@@ connection db ???????parameter null. ???*/ ???public function _connect () ???{ ???????try { ???????????$_pdo = new PDO(‘mysql:host=‘. $this->_host .‘;dbname=‘ .$this->_dbname, $this->_user, $this->_pwd); ???????????$_pdo->exec("SET NAMES utf8"); ???????} catch (PDOException $e) { ???????????die("Connection fail:" . $e->getMessage()); ???????} ???????// 把$_pdo这个句柄放在静态属性,方便以下方法调用 ???????self::$connection = $_pdo; ???} ???/* ???????@@ update data ???????@@param $table 表格 ???????@@param $fields 字段名 关联数组 ???????@@param $where 条件 ???????return 受影响的行数 ???*/ ???public function _update ($table, $fields, $where = null) ???{ ???????$fields_key = implode(array_keys($fields)); ???????$fields_value = implode(array_values($fields)); ???????$sql = "update {$table} set {$fields_key} = ‘{$fields_value}‘ " . ($where==null?null: "where " .$where); ???????return self::$connection->exec($sql); ???} ???/* ???????@@ insert data ???????@@param $table 表格 ???????@@param $array 关联数组 ???*/ ???public function _insert ($table, array $array) ???{ ???????$this->_array = $array; ???????$this->foreachstr(); ???????$sql = "insert into {$table} ($this->_fields) values (‘{$this->_values}‘)"; ???????return self::$connection->exec($sql); ???} ???/* ???????@@ select data ???????@param $table 表格 ???????@param $field string field,field2,field3, ???????@param $where array 一维关联数组 default null; ???????@result_type ?PDO::FETCH_BOTH 关联加索引 PDO::FETCH_NUM 索引 default PDO::FETCH_ASSOC 关联 ???*/ ???public function _select ($table, $fields = ‘*‘, $where = null, $result_type = PDO::FETCH_ASSOC) ???{ ???????if ($fields == ‘*‘ and $where == null) { ???????????$sql = "select {$fields} from {$table} " . ($where==null?null:"where ".$where); ???????????$stmt = self::$connection->prepare($sql); ???????????$stmt->execute(); ???????????while ($row = $stmt->fetch($result_type)) { ???????????????$rows[] = $row; ???????????} ???????????return $rows; ???????} ???????if ($where != null) { ???????????if (!is_array($where)) return false; ???????????// 赋值给定义的属性交给以下foreacharray处理,返回的是一个字符串 ???????????$this->_array = $where; ???????????$where = $this->foreacharray(); ???????????if ($where) { ???????????????$sql = "select {$fields} from {$table} ". ($where==null?null:"where ".$where); ???????????????$stmt = self::$connection->prepare($sql); ???????????????$stmt->execute(); ???????????????while ($row = $stmt->fetch($result_type)) { ???????????????????$rows[] = $row; ???????????????} ???????????} ???????????return $rows; ???????} ???} ???/* ???????@查询表格中数据的条数 ???????@param $table 表格 ???????@param $where 关联数组 ???????@return 查询到的数量 number ???*/ ???public function _selectnum ($table, $where = null) ???{ ???????$sql = ‘‘; ???????if (is_null($where)) { ???????????$sql .= "select count(*) from {$table}"; ???????} else { ???????????$this->_array = $where; ???????????$where = $this->foreacharray(); ???????????$sql .= "select count(*) from {$table} " .($where==null?null:"where ".$where); ???????} ???????$stmt = self::$connection->prepare($sql); ???????$stmt->execute(); ???????$row_count = $stmt->fetch(); ???????return $row_count[0]; ???} ???/* ???????@@ delte data ???????@$table 表格 ???????@$where array default null ???????@return 受影响的行数 ???*/ ???public function _delete ($table, $where = null) ???{ ???????if (is_null($where)) return false; ?????// 防止误删表 ???????if (!is_array($where)) return array(); ???????$this->_array = $where; ???????$where = $this->foreacharray(); ???????$sql = "delete from {$table} " . ($where==null?null:"where " . $where); ???????return self::$connection->exec($sql); ???} ???/* ???????@@ 分割数组为字符串 ???????@@param $array 一维关联数组 ???????@$this->_fields field1, field2, field3. ???????@$this->_values ‘values1‘, ‘values2‘, ‘values3‘; ???*/ ???protected function foreachstr () ???{ ???????if (!is_array($this->_array)) return false; ???????$fields = ‘‘; ???????$values = ‘‘; ???????foreach ($this->_array as $key => $val) { ????????????$fields .= $key.‘,‘; ????????????$values .= $val.‘,‘; ???????} ???????$this->_fields = rtrim($fields, ‘,‘); ???????$this->_values = str_replace(‘,‘, ‘\‘,\‘‘, rtrim($values, ‘,‘)); ???} ???/* ???????@@ 将关联数组转换为带有and的字符串 ???????@@param $array 关联数组 ???*/ ???protected function foreacharray () ???{ ???????if (!is_array($this->_array)) return false; ???????$str = ‘‘; ???????foreach ($this->_array as $key => $val) { ???????????if ($key == $val) return false; ????????// 防止sql注入 ???????????$str .= $key .‘ = ‘. "‘$val‘".‘ and ‘; ???????} ???????return substr($str, 0, strrpos($str, ‘and‘)); ???} ???/* ???????@@ 每页显示的数据 ???????@param $table 表格 ???????@param $field 要查询的字段 ?string field1, fiedl2, field3, default * ???????@param $curr_page 当前页码 ???????@param $each_page 自定义每页数据 default 10 ???????@param $where 条件 ???????@return $page ?array 关联数组 ???*/ ???public function _showpage ($table, $field_page = null, $curr_page = null, $each_page = null, $where = null) ???{ ???????if (is_null($field_page)) $field_page = $this->field_page; ???????$this->count_page = $this->_selectnum($table); ?????// 直接调用 _selectnum 拿到总条数 ???????if (is_null($each_page)) $each_page = $this->each_page; ????// 如果$each_page 为空则使用默认的$each_page default 10 ???????// 防止输入错误的当前页导致当前页参数无效 ???????if (is_null($curr_page) || $curr_page > ceil($this->count_page/$each_page) || $curr_page <= 0) $curr_page = $this->curr_page; ???????if (!is_null($where)) { ???????????$this->_array = $where; ???????????$where = $this->foreacharray(); ???????} ???????$curr_page = ($curr_page-1)*$each_page; ???????$count_page = ceil($this->count_page/$each_page); ???????$sql = "select {$field_page} from {$table} " .($where==null?null:"where ". $where). " limit {$curr_page}, {$each_page}"; ?// sql注入会让这里多一个where ???????$stmt = self::$connection->prepare($sql); ???????$stmt->execute(); ???????$pages = []; ???????while ($page = $stmt->fetch(PDO::FETCH_ASSOC)) { ???????????$pages[] = $page; ???????} ???????$this->count_page = $count_page; ???????if ($pages == null) return false; ???????return $pages; ???} ???/* ???????@下一页 ???????@param $table 表格 ???????@param $field_page 要查询的字段 ???????@param $curr_page 条件不符合时调用的是第一页的数据 ???????@return array 二维关联数组 ???*/ ???public function _nextpage ($table, $field_page, $curr_page = null) ???{ ???????$curr_page<$this->count_page?$this->curr_page+=1:$this->curr_page=1; ???????$result = $this->_showpage($table, $field_page, $curr_page); ???????return $result; ???} ???/* ???????@上一页 ???????@param $table 表格 ???????@param $field_page 要查询的字段 ???????@param $curr_page 默认为空时调用的是第一页的数据 ???????@return array 二维关联数组 ???*/ ???public function _prevpage ($table, $field_page, $curr_page = null) ???{ ???????$result = $this->_showpage($table, $field_page, $curr_page); ???????$curr_page>=0?$this->curr_page-=1:$this->curr_page=$this->count_page; ???????return $result; ???} ???/* ???????@总页数 ???????@ param $table 表格 ???????@ return 总页数 ???*/ ???public function _showcount ($table) ???{ ???????$this->_showpage($table); ???????return $this->count_page; ???}}

PHP 基于PDO封装CURD,分页类封装

原文地址:https://www.cnblogs.com/phpcurd/p/8794665.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved