单例类,能操作数据库,能拼接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. Python引用传值总结

    Python函数的参数传值使用的是引用传值,也就是说传的是参数的内存地址值,因此在函数中改变参数的值,函数外也会改变. 这里需要注意的是如果传的参数类型是不可改变的,如String类型.元组类型,函数 ...

  2. HDFS体系结构:(Distributed File System)

    分布式系统的大概图 服务器越来越多,客户端对服务器的管理就会越来越复杂,客户端如果是我们用户,就要去记住大量的ip. 对用户而言访问透明的就是分布式文件系统. 分布式文件系统最大的特点:数据存储在多台 ...

  3. dataStructure@ Check if a directed graph has cycles

    #include<iostream> #include<cstdio> #include<cstring> #include<limits> #incl ...

  4. nyoj 60 谁获得了最高奖学金

    谁获得了最高奖学金 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述     某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: ...

  5. IAR 1.3 for STM8 ST-Link无法调试 无法仿真 the debugging session could not be started

    IAR 1.3 for STM8 ST-Link无法调试 the debugging session could not be started CPU型号是:STM8F103F3 首先要用ST Vis ...

  6. 剑指OFFER之合并有序链表(九度OJ1519)

    题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测 ...

  7. 框架中web.xml中配置文件解析

    1.XSS指跨站脚本攻击 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在 ...

  8. Thread学习

    1.定义 2.作用 3.和进程的比较 4.多线程(multithreading)的优点和缺陷 5.调度(scheduling) 6.线程相关概念 定义 线程就是最小的可编程指令序列,是进程的子集.一个 ...

  9. Linux内核之内存管理(4)--缺页处理程序

    本文主要解说缺页处理程序,凝视足够具体,不再解释. //以下函数将一页内存页面映射到指定线性地址处,它返回页面的物理地址 //把一物理内存页面映射到线性地址空间指定处或者说把线性地址空间指定地址add ...

  10. Codeforces Round #325 (Div. 2) F. Lizard Era: Beginning meet in the mid

    F. Lizard Era: Beginning Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...