db.class的实现类
单例类,能操作数据库,能拼接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的实现类的更多相关文章
- DB字段顺序与类的属性顺序一致:{Oracle.DataAccess.Client.OracleException ORA-00932: 数据类型不一致: 应为 TIMESTAMP, 但却获得 NUMBER
{Oracle.DataAccess.Client.OracleException ORA-00932: 数据类型不一致: 应为 TIMESTAMP, 但却获得 NUMBER 应用程序中类型T ...
- Discuz!数据库操作DB类和C::t类介绍
类定义文件 DB类: 文件\source\class\class_core.php class DB extends discuz_database {} discuz_database类定义 文件\ ...
- PHP用单例模式实现一个数据库类
使用单例模式的出发点: 1.php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源. 2.如果系统中需要有一个类来全局控制某些 ...
- Android SQLiteOpenHelper类的使用
SQLiteOpenHelper类是Android平台提供的用于SQLite数据库的创建.打开以及版本管理的帮助类.一般需要继承并这个类并实现它的onCreate和onUpgrade方法,在构造方法中 ...
- C# 访问MongoDB 通用方法类
using MongoDB.Driver; using System; namespace MongoDBDemo { public class MongoDb { public MongoDb(st ...
- Android项目中单实例数据库类,解决database is locked
一.数据库操作 package com.ping.db; import android.content.Context; import android.database.sqlite.SQLiteDa ...
- 继承关系在内存和DB中的映射
使用 将若干相似的类映射为单表,对拥有许多特殊数据的类使用具体表继承. 对高层次使用类表继承,对低层次使用具体表继承. Single Table Inheritance 在DB中将类继承层次设计为一个 ...
- ADO.NET(一) 空间 ADO.NET结构 命名空间(车延禄) System.Data—— 所有的一般数据访问类 S(转载)
ADO.NET(一) 空间 ADO.NET结构 命名空间(车延禄)System.Data—— 所有的一般数据访问类System.Data.Common—— 各个数据提供程序共享(或重写)的类Sys ...
- 免费数据库(SQLite、Berkeley DB、PostgreSQL、MySQL、Firebird、mSQL、MSDE、DB2 Express-C、Oracle XE)
SQLite数据库是中小站点CMS的最佳选择 SQLite 是一个类似Access的轻量级数据库系统,但是更小.更快.容量更大,并发更高.为什么说 SQLite 最适合做 CMS (内容管理系统)呢? ...
随机推荐
- Codeforces 603A Alternative Thinking
题意:给你一个01串,必须替换一次,且替换的为子串.问换完后,最大01串长度. #include <bits/stdc++.h> typedef long long ll; using n ...
- Cocos2d-x中jsb结构剖析
libs/javascript下有两部分bindings和spidermonkey.其中spidermonkey为js虚拟机,暂时不去管它.bindings下分为四部分,分别为主干部分,generat ...
- 【转载】如何在C语言中调用shell命令
转载自:http://blog.csdn.net/chdhust/article/details/7951576 如何在C语言中调用shell命令 在linux操作系统中,很多shell命令使用起来非 ...
- HW6.8
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- Serach
1.二分查找 public class BubbleSort { public static int binarySerach(int[] a,int value){ int low=0; int h ...
- BNUOJ-26474 Bread Sorting 逆序对
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26474 题意:给一个数列,可以对三个数操作:把最后一个数放到第一个,前两个数后移一位.问最 ...
- SRM 599 DIV 2
rating又掉了...变灰色了%>_<%.250pt很简单,一眼看上去是个背包,没有多想立马写了个01背包,后面发现其实就是个简单的排序...因为只是需要求数量而已.500pt被我写残了 ...
- yum cdh4
cdh4 install for Centos6那个最美的年代,最好的时光,一路梦想,一路流泪,流的不会是懦弱的泪,而是对奋斗的寄于;1,repo配置>>>/etc/yum.repo ...
- HDU3966-Aragorn's Story(树链剖分)
第一道树链剖分. 早就想学..一直懒.. 感觉还是比较简单的. 主要是要套其他数据结构,线段树大概还好,平衡树之类的肯定就跪了. http://blog.csdn.net/acdreamers/art ...
- 纯CSS完美实现垂直水平居中的6种方式
前言 由于HTML语言的定位问题,在网页中实现居中也不是如word中那么简单,尤其在内容样式多变,内容宽高不定的情况下,要实现合理的居中也是颇考验工程师经验的.网上讲居中的文章很多,但是都不太完整,所 ...