单例类,能操作数据库,能拼接sql语句,能写入日志

<?php

class mysql extends db{
private static $ins=null;
private $conn=null;
private $conf=array();
//单例模式 protected function __construct(){
$this->conf=conf::getIns(); $this->connect($this->conf->host,$this->conf->user,$this->conf->password);
$this->select_db($this->conf->db);
$this->setChar($this->conf->char);
}
public static function getIns(){
if(self::$ins instanceof self){
return self::$ins;
}
self::$ins=new self();
return self::$ins;
}
public function connect($h,$u,$p){
$this->conn=mysql_connect($h,$u,$p);
if(!$this->conn){
$err=new Exception('连接失败');
throw $err;
}
}
protected function select_db($db){
$sql='use '.$db;
$this->query($sql);
}
protected function setChar($char){
$sql='set names '.$char;
return $this->query($sql);
}
public function query($sql){
if(defined('DEBUG')){
log::write($sql);
} $rs=mysql_query($sql,$this->conn); if(!$rs){
log::write(mysql_error());
}
return $rs;
} /*
查询多行数据
params $sql select型语句
return array/boolean
*/
public function getAll($sql){
$rs=$this->query($sql); $arr=array();
while(($row=mysql_fetch_assoc($rs))!==false){
$arr[]=$row;
}
return $arr;
} /*
查询单行数据
params $sql select型语句
return array/boolean
*/
public function getRow($sql){
$rs=$this->query($sql); return mysql_fetch_assoc($rs);
} /*
查询单个数据
params $sql select型语句
return array/boolean
*/
public function getOne($sql){
$rs=$this->query($sql);
$row=mysql_fetch_row($rs);
return $row[0];
}
//返回影响的行数
public function affected_rows(){
return mysql_affected_rows($this->conn);
}
//返回最新的auto_increment列的自增长的值
public function insert_id(){
return mysql_insert_id($this->conn);
}
/* 自动执行insert/update语句
params $sql select型语句
return array/boolean
$this->autoExecute('user',array('username'=>'zhangsan','email'=>'zhang@123.com'),'insert');
将自动形成 insert into user (username,email) values ('zhangsan','zhang@123.com');
*/
public function autoExecute($table,$arr,$mode='insert',$where=' where 1 limit 1'){
if(!is_array($arr)){
return false;
} if($mode=='update'){
$sql='update '.$table.' set ';
foreach ($arr as $k => $v) {
$sql.=$k."= '". $v ."',";
}
$sql=rtrim($sql,',');
$sql.=$where; return $this->query($sql);
} $sql='insert into '.$table.' ('.implode(',',array_keys($arr)).')';
$sql.=' values (\'';
$sql.=implode("','",array_values($arr));
$sql .='\')'; return $this->query($sql);
}
}
?>

db.class的实现类的更多相关文章

  1. DB字段顺序与类的属性顺序一致:{Oracle.DataAccess.Client.OracleException ORA-00932: 数据类型不一致: 应为 TIMESTAMP, 但却获得 NUMBER

    {Oracle.DataAccess.Client.OracleException ORA-00932: 数据类型不一致: 应为 TIMESTAMP, 但却获得 NUMBER     应用程序中类型T ...

  2. Discuz!数据库操作DB类和C::t类介绍

    类定义文件 DB类: 文件\source\class\class_core.php class DB extends discuz_database {} discuz_database类定义 文件\ ...

  3. PHP用单例模式实现一个数据库类

    使用单例模式的出发点: 1.php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源. 2.如果系统中需要有一个类来全局控制某些 ...

  4. Android SQLiteOpenHelper类的使用

    SQLiteOpenHelper类是Android平台提供的用于SQLite数据库的创建.打开以及版本管理的帮助类.一般需要继承并这个类并实现它的onCreate和onUpgrade方法,在构造方法中 ...

  5. C# 访问MongoDB 通用方法类

    using MongoDB.Driver; using System; namespace MongoDBDemo { public class MongoDb { public MongoDb(st ...

  6. Android项目中单实例数据库类,解决database is locked

    一.数据库操作 package com.ping.db; import android.content.Context; import android.database.sqlite.SQLiteDa ...

  7. 继承关系在内存和DB中的映射

    使用 将若干相似的类映射为单表,对拥有许多特殊数据的类使用具体表继承. 对高层次使用类表继承,对低层次使用具体表继承. Single Table Inheritance 在DB中将类继承层次设计为一个 ...

  8. ADO.NET(一) 空间 ADO.NET结构 命名空间(车延禄) System.Data—— 所有的一般数据访问类 S(转载)

    ADO.NET(一) 空间   ADO.NET结构 命名空间(车延禄)System.Data—— 所有的一般数据访问类System.Data.Common—— 各个数据提供程序共享(或重写)的类Sys ...

  9. 免费数据库(SQLite、Berkeley DB、PostgreSQL、MySQL、Firebird、mSQL、MSDE、DB2 Express-C、Oracle XE)

    SQLite数据库是中小站点CMS的最佳选择 SQLite 是一个类似Access的轻量级数据库系统,但是更小.更快.容量更大,并发更高.为什么说 SQLite 最适合做 CMS (内容管理系统)呢? ...

随机推荐

  1. Android编译过程详解(一)

    Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...

  2. cocos2d-x3.0+Eclipse配置说明

    假如我们已经装了JavaJDK.Cygwin,也解压了2013-08-27之后最新的AndroidSDK,其实最新的AndroidSDK已经集成了eclipse,eclipse里面已经配置好了Andr ...

  3. HDU-4647 Another Graph Game 贪心,博弈

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4647 注意这题两人的决策是想要使得自己的分数与对方的差值最大.. 注意到数据范围,显然是贪心之类的,如 ...

  4. 一切不以用户为中心的O2O 都是耍流氓

    今天去万达广场逛街,手机搜了下附近的Wifi,发现有万达的免费Wifi,想起前些日子网上说万达要做O2O的试运营,于是尝试连接了下,结果弹出页面,要输入手机号,然后发送验证码才能登陆,结果输入手机号, ...

  5. 家庭局域网接入Internet

     接入Internet  建立宽带连接 步骤一:单击"网络",再属性 步骤二:单击"更改适配器设置" 步骤三:选择"宽带连接" 步骤四:输入 ...

  6. A Tour of Go Map literals

    Map literals are like struct literals, but the keys are required. package main import "fmt" ...

  7. UITableView性能优化

    关于UITableView的性能优化,网络上也有一些总结.在这里就介绍下我们项目中遇到的问题以及对应的解决方法.相信我们遇到的问题也有一定的普适性,能够作为其他问题的优化方案. Instruments ...

  8. 设计模式23---设计模式之装饰模式(Decorator)(结构型)

    1.装饰模式讲解 1.1定义 动态的给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更加灵活. 1.2装饰模式要点 透明的给一个对象增加功能,换句话说就是要给一个对象增加功能,但是不能 ...

  9. web pack的使用事项

    一开始把webpack想的很难,很复杂,哈哈. 其实写的好的东西真的是越简单,越简单的东西其实越难写. 按照How to一步一步基本就能理解,webpack怎么使用了, 后面就是如何帮程序一步一步找到 ...

  10. Unity3D-UnityVS的安装和使用

    我们先下载UnityVS,在下面这个网站的资源中搜索一下 http://www.u3dchina.com/portal.php 安装完毕后,执行以下操作 1:打开你的Unity项目 2:在Unity中 ...