找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 230|回复: 0
打印 上一主题 下一主题

php封装的数据库函数与用法示例【参考thinkPHP】

[复制链接]

2647

主题

2647

帖子

7881

积分

论坛元老

Rank: 8Rank: 8

积分
7881
跳转到指定楼层
楼主
发表于 2018-2-14 05:31:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            本文实例讲述了php封装的数据库函数与用法。分享给大家供大家参考,具体如下:
从Thinkphp里面抽离出来的数据库模块,感觉挺好用
common.php:
' . $label . htmlspecialchars($output, ENT_QUOTES) . '';
  } else {
   $output = $label . print_r($var, true);
  }
} else {
  ob_start();
  var_dump($var);
  $output = ob_get_clean();
  if (!extension_loaded('xdebug')) {
   $output = preg_replace("/\]\=\>\n(\s+)/m", '] => ', $output);
   $output = '' . $label . htmlspecialchars($output, ENT_QUOTES) . '';
  }
}
if ($echo) {
  echo($output);
  return null;
}
else
  return $output;
}
/**
* 调试输出
* @param type $msg
*/
function _debug($msg) {
if (C("debug"))
  echo "$msg
";
}
function _log($filename, $msg) {
$time = date("Y-m-d H:i:s");
$msg = "[$time]\n$msg\r\n";
if (C("log")) {
  $fd = fopen($filename, "a+");
  fwrite($fd, $msg);
  fclose($fd);
}
}
/**
* 日志记录
* @param type $str
*/
function L($msg) {
$time = date("Y-m-d H:i:s");
$clientIP = $_SERVER['REMOTE_ADDR'];
$msg = "[$time $clientIP] $msg\r\n";
$log_file = C("LOGFILE");
_log($log_file, $msg);
}
?>
config.php:
'mysql',
'DB_HOST' => '127.0.0.1',
'DB_NAME' => 'DB',
'DB_USER' => 'USER',
'DB_PWD' => 'PWD',
'DB_PORT' => '3306',
);
return $db;
?>
数据库模型类Model.class.php,放到classes/目录下:
db = $this->connect();
}
/**
  * 连接数据库方法
  */
public function connect($config = '', $linkNum = 0) {
  if (!isset($this->linkID[$linkNum])) {
   if (empty($config))
    $config = array(
     'username' => C('DB_USER'),
     'password' => C('DB_PWD'),
     'hostname' => C('DB_HOST'),
     'hostport' => C('DB_PORT'),
     'database' => C('DB_NAME')
    );
   $this->linkID[$linkNum] = new mysqli($config['hostname'], $config['username'], $config['password'], $config['database'], $config['hostport'] ? intval($config['hostport']) : 3306);
   if (mysqli_connect_errno())
    throw_exception(mysqli_connect_error());
   $this->connected = true;
  }
  return $this->linkID[$linkNum];
}
/**
  * 初始化数据库连接
  */
protected function initConnect() {
  if (!$this->connected) {
   $this->db = $this->connect();
  }
}
/**
  * 获得所有的查询数据
  * @access private
  * @param string $sql sql语句
  * @return array
  */
public function select($sql) {
  $this->initConnect();
  if (!$this->db)
   return false;
  $query = $this->db->query($sql);
  $list = array();
  if (!$query)
   return $list;
  while ($rows = $query->fetch_assoc()) {
   $list[] = $rows;
  }
  return $list;
}
/**
  * 只查询一条数据
  */
public function find($sql) {
  $resultSet = $this->select($sql);
  if (false === $resultSet) {
   return false;
  }
  if (empty($resultSet)) {// 查询结果为空
   return null;
  }
  $data = $resultSet[0];
  return $data;
}
/**
  * 获取一条记录的某个字段值 , sql 由自己组织
  * 例子: $model->getField("select id from user limit 1")
  */
public function getField($sql) {
  $resultSet = $this->select($sql);
  if (!empty($resultSet)) {
   return reset($resultSet[0]);
  }
}
/**
  * 执行查询 返回数据集
  */
public function query($str) {
  $this->initConnect();
  if (!$this->db) {
   if (C("debug"))
    echo "connect to database error";
   return false;
  }
  $this->queryStr = $str;
  //释放前次的查询结果
  if ($this->queryID)
   $this->free();
  $this->queryID = $this->db->query($str);
  // 对存储过程改进
  if ($this->db->more_results()) {
   while (($res = $this->db->next_result()) != NULL) {
    $res->free_result();
   }
  }
  //$this->debug();
  if (false === $this->queryID) {
   echo $this->error();
   return false;
  } else {
   $this->numRows = $this->queryID->num_rows;
   $this->numCols = $this->queryID->field_count;
   return $this->getAll();
  }
}
/**
  * 执行语句 , 例如插入,更新操作
  * @access public
  * @param string $str sql指令
  * @return integer
  */
public function execute($str) {
  $this->initConnect();
  if (!$this->db)
   return false;
  $this->queryStr = $str;
  //释放前次的查询结果
  if ($this->queryID)
   $this->free();
  $result = $this->db->query($str);
  if (false === $result) {
   $this->error();
   return false;
  } else {
   $this->numRows = $this->db->affected_rows;
   $this->lastInsID = $this->db->insert_id;
   return $this->numRows;
  }
}
/**
  * 获得所有的查询数据
  * @access private
  * @param string $sql sql语句
  * @return array
  */
private function getAll() {
  //返回数据集
  $result = array();
  if ($this->numRows > 0) {
   //返回数据集
   for ($i = 0; $i numRows; $i++) {
    $result[$i] = $this->queryID->fetch_assoc();
   }
   $this->queryID->data_seek(0);
  }
  return $result;
}
/**
  * 返回最后插入的ID
  */
public function getLastInsID() {
  return $this->db->insert_id;
}
// 返回最后执行的sql语句
public function _sql() {
  return $this->queryStr;
}
/**
  * 数据库错误信息
  */
public function error() {
  $this->error = $this->db->errno . ':' . $this->db->error;
  if ('' != $this->queryStr) {
   $this->error .= "\n [ SQL语句 ] : " . $this->queryStr;
  }
  //trace($this->error, '', 'ERR');
  return $this->error;
}
/**
  * 释放查询结果
  */
public function free() {
  $this->queryID->free_result();
  $this->queryID = null;
}
/**
  * 关闭数据库
  */
public function close() {
  if ($this->db) {
   $this->db->close();
  }
  $this->db = null;
}
/**
  * 析构方法
  */
public function __destruct() {
  if ($this->queryID) {
   $this->free();
  }
  // 关闭连接
  $this->close();
}
}
例子:
#include "common.php"
function test(){
$model = M();
$sql = "select * from test";
$list = $model->query($sql);
_dump($list);
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+mysql数据库操作入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总
希望本文所述对大家PHP程序设计有所帮助。
            
            
您可能感兴趣的文章:
  • ThinkPHP实现多数据库连接的解决方法
  • ThinkPHP连接数据库及主从数据库的设置教程
  • ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
  • thinkphp配置连接数据库技巧
  • ThinkPHP连接数据库的方式汇总
  • thinkphp备份数据库的方法分享
  • ThinkPHP3.2.3数据库设置新特性
  • thinkphp表单上传文件并将文件路径保存到数据库中
  • thinkPHP数据库增删改查操作方法实例详解
  • 基于thinkPHP类的插入数据库操作功能示例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端