PHP Mysql类【转】
前几天没事在网上转发现了一个类,记录下来:
- <?php
- Class DB {
- private $link_id;
- private $handle;
- private $is_log;
- private $time;
- //构造函数
- public function __construct() {
- $this->time = $this->microtime_float();
- require_once("config.db.php");
- $this->connect($db_config["hostname"], $db_config["username"], $db_config["password"], $db_config["database"], $db_config["pconnect"]);
- $this->is_log = $db_config["log"];
- if($this->is_log){
- $handle = fopen($db_config["logfilepath"]."dblog.txt", "a+");
- $this->handle=$handle;
- }
- }
- //数据库连接
- public function connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0,$charset='utf8') {
- if( $pconnect==0 ) {
- $this->link_id = @mysql_connect($dbhost, $dbuser, $dbpw, true);
- if(!$this->link_id){
- $this->halt("数据库连接失败");
- }
- } else {
- $this->link_id = @mysql_pconnect($dbhost, $dbuser, $dbpw);
- if(!$this->link_id){
- $this->halt("数据库持久连接失败");
- }
- }
- if(!@mysql_select_db($dbname,$this->link_id)) {
- $this->halt('数据库选择失败');
- }
- @mysql_query("set names ".$charset);
- }
- //查询
- public function query($sql) {
- $this->write_log("查询 ".$sql);
- $query = mysql_query($sql,$this->link_id);
- if(!$query) $this->halt('Query Error: ' . $sql);
- return $query;
- }
- //获取一条记录(MYSQL_ASSOC,MYSQL_NUM,MYSQL_BOTH)
- public function get_one($sql,$result_type = MYSQL_ASSOC) {
- $query = $this->query($sql);
- $rt =& mysql_fetch_array($query,$result_type);
- $this->write_log("获取一条记录 ".$sql);
- return $rt;
- }
- //获取全部记录
- public function get_all($sql,$result_type = MYSQL_ASSOC) {
- $query = $this->query($sql);
- $i = 0;
- $rt = array();
- while($row =& mysql_fetch_array($query,$result_type)) {
- $rt[$i]=$row;
- $i++;
- }
- $this->write_log("获取全部记录 ".$sql);
- return $rt;
- }
- //插入
- public function insert($table,$dataArray) {
- $field = "";
- $value = "";
- if( !is_array($dataArray) || count($dataArray)<=0) {
- $this->halt('没有要插入的数据');
- return false;
- }
- while(list($key,$val)=each($dataArray)) {
- $field .="$key,";
- $value .="'$val',";
- }
- $field = substr( $field,0,-1);
- $value = substr( $value,0,-1);
- $sql = "insert into $table($field) values($value)";
- $this->write_log("插入 ".$sql);
- if(!$this->query($sql)) return false;
- return true;
- }
- //更新
- public function update( $table,$dataArray,$condition="") {
- if( !is_array($dataArray) || count($dataArray)<=0) {
- $this->halt('没有要更新的数据');
- return false;
- }
- $value = "";
- while( list($key,$val) = each($dataArray))
- $value .= "$key = '$val',";
- $value .= substr( $value,0,-1);
- $sql = "update $table set $value where 1=1 and $condition";
- $this->write_log("更新 ".$sql);
- if(!$this->query($sql)) return false;
- return true;
- }
- //删除
- public function delete( $table,$condition="") {
- if( empty($condition) ) {
- $this->halt('没有设置删除的条件');
- return false;
- }
- $sql = "delete from $table where 1=1 and $condition";
- $this->write_log("删除 ".$sql);
- if(!$this->query($sql)) return false;
- return true;
- }
- //返回结果集
- public function fetch_array($query, $result_type = MYSQL_ASSOC){
- $this->write_log("返回结果集");
- return mysql_fetch_array($query, $result_type);
- }
- //获取记录条数
- public function num_rows($results) {
- if(!is_bool($results)) {
- $num = mysql_num_rows($results);
- $this->write_log("获取的记录条数为".$num);
- return $num;
- } else {
- return 0;
- }
- }
- //释放结果集
- public function free_result() {
- $void = func_get_args();
- foreach($void as $query) {
- if(is_resource($query) && get_resource_type($query) === 'mysql result') {
- return mysql_free_result($query);
- }
- }
- $this->write_log("释放结果集");
- }
- //获取最后插入的id
- public function insert_id() {
- $id = mysql_insert_id($this->link_id);
- $this->write_log("最后插入的id为".$id);
- return $id;
- }
- //关闭数据库连接
- protected function close() {
- $this->write_log("已关闭数据库连接");
- return @mysql_close($this->link_id);
- }
- //错误提示
- private function halt($msg='') {
- $msg .= "\r\n".mysql_error();
- $this->write_log($msg);
- die($msg);
- }
- //析构函数
- public function __destruct() {
- $this->free_result();
- $use_time = ($this-> microtime_float())-($this->time);
- $this->write_log("完成整个查询任务,所用时间为".$use_time);
- if($this->is_log){
- fclose($this->handle);
- }
- }
- //写入日志文件
- public function write_log($msg=''){
- if($this->is_log){
- $text = date("Y-m-d H:i:s")." ".$msg."\r\n";
- fwrite($this->handle,$text);
- }
- }
- //获取毫秒数
- public function microtime_float() {
- list($usec, $sec) = explode(" ", microtime());
- return ((float)$usec + (float)$sec);
- }
- }
- ?>
- <?php
- $db_config["hostname"] = "localhost"; //服务器地址
- $db_config["username"] = "root"; //数据库用户名
- $db_config["password"] = "123"; //数据库密码
- $db_config["database"] = "test"; //数据库名称
- $db_config["charset"] = "utf8";//数据库编码
- $db_config["pconnect"] = 1;//开启持久连接
- $db_config["log"] = 1;//开启日志
- $db_config["logfilepath"] = './';//开启日志
- ?>
PHP Mysql类【转】的更多相关文章
- 完善ecshop的mysql类
前篇文章中,我提及到了如何<提取ecshop的mysql类>.但是没有数据库前缀的写法 废话不说,上步骤(目录结构请参考提取ecshop的mysql类) 修改connfig.php为 &l ...
- 提取ecshop的mysql类
在下一篇文章中,我还将介绍如何完善ecshop的mysql类,使用ecshop的数据库前缀 下载ecshop后,解压缩,进入目录upload/includes,复制里面的cls_mysql.php放进 ...
- php四个常用类封装 :MySQL类、 分页类、缩略图类、上传类;;分页例子;
Mysql类 <?php /** * Mysql类 */ class Mysql{ private static $link = null;//数据库连接 /** * 私有的构造方法 */ pr ...
- 简单的php Mysql类(查询 删除 更新)
php Mysql类一般都包括了几乎我们常用的数据库操作方法,这里只提供了查询 删除 更新三种操作,算不是很全只是一个简单的数据库查询类了. 代码如下 复制代码 class mysql { ...
- 简单的一个MySQL类的实现:
'''定义MySQL类:1.对象有id.host.port三个属性2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一3.提供两种实例化方式,方式一:用户传入host和por ...
- C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]
原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using Sy ...
- C#---数据库访问通用类、Access数据库操作类、mysql类 .
//C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System. ...
- 封装mysql类
类: <?phpheader("content-type:text/html;charset=utf-8");//封装一个类/*掌握满足单例模式的必要条件(1)私有的构造方法 ...
- VBA Mysql 类
Option Explicit '==================================== 声明属性 =================================Private ...
随机推荐
- The Doors - POJ 1556 (线段相交)
题目大意:有一个房间(左上角(0,10),右下角(10,0)),然后房间里有N面墙,每面墙上都有两个门,求出来从初始点(0,5),到达终点(10,5)的最短距离. 分析:很明显根据两点之间直线最短 ...
- assembly的说明
Assembly SampleAssembly; // Instantiate a target object. Int32 Integer1 = new Int32(); Type Type1; / ...
- java James
使用JavaMail发送电子邮件(案例) 需求: 使用JavaMail技术,实现从A账户给B账户发送一封电子邮件,标题为"会议通知",邮件内容为"XX你好!请于明天下午1 ...
- java 深clone和浅clone
1. clone类 public class Person implements Cloneable, Serializable{ /** * */ private static final long ...
- TOJ3744(Transportation Costs)
Transportation Costs Time Limit(Common/Java):2000MS/6000MS Memory Limit:65536KByte Total Submi ...
- [Javascript] Array - join()
The join() method joins all elements of an array into a string. var name = 'shane osbourne'; var upp ...
- QtXML 举例
QT读取xml有2个方法 对于xml数据比较大的就要用QXmlStreamReader 对于数据比较小的就用QDomDocument,这个比较方便 我这里就是以QDomDocument为主要内容,讲解 ...
- Java的演变过程
1. 1996.01.23 JDK1.0 代号Oak:212个类.8个包: 2. 1997.02.19 JDK1.1 504个类.23个包: Java Bean.远程方法调用(RMI).JAR文件格式 ...
- Java基础知识强化之集合框架笔记24:ArrayList存储自定义对象并遍历
1. ArrayList存储自定义对象并遍历 2. 代码示例: Student.java,如下: package cn.itcast_01; public class Student { privat ...
- Customizing the Test Runner
There are several situations where you want to customize Robolectric's test runner to perform some o ...