代码如下:
<?php
/*
MYSQL
数据库访问封装类
MYSQL
数据访问方式,php4支持以mysql_开头的过程访问方式,php5开始支持以mysqli_开头的过程和mysqli面向对象
访问方式,本封装类以mysql_封装
数据访问的一般流程:
1,连接数据库
mysql_connect
or
mysql_pconnect
2,选择数据库
mysql_select_db
3,执行SQL查询
mysql_query
4,处理返回的数据
mysql_fetch_array
mysql_num_rows
mysql_fetch_assoc
mysql_fetch_row
etc
*/
class
db_mysql
{
var
$querynum
=
0
//当前页面进程查询数据库的次数
var
$dblink
//数据库连接资源
//链接数据库
function
connect($dbhost,$dbuser,$dbpw,$dbname='',$dbcharset='utf-8',$pconnect=0
,
$halt=true)
{
$func
=
empty($pconnect)
?
'mysql_connect'
:
'mysql_pconnect'
$this->dblink
=
@$func($dbhost,$dbuser,$dbpw)
if
($halt
&&
!$this->dblink)
{
$this->halt("无法链接数据库!")
}
//设置查询字符集
mysql_query("SET
character_set_connection={$dbcharset},character_set_results={$dbcharset},character_set_client=binary",$this->dblink)
//选择数据库
$dbname
&&
@mysql_select_db($dbname,$this->dblink)
}
//选择数据库
function
select_db($dbname)
{
return
mysql_select_db($dbname,$this->dblink)
}
//执行SQL查询
function
query($sql)
{
$this->querynum++
return
mysql_query($sql,$this->dblink)
}
//返回最近一次与连接句柄关联的INSERT,UPDATE
或DELETE
查询所影响的记录行数
function
affected_rows()
{
return
mysql_affected_rows($this->dblink)
}
//取得结果集中行的数目,只对select查询的结果集有效
function
num_rows($result)
{
return
mysql_num_rows($result)
}
//获得单格的查询结果
function
result($result,$row=0)
{
return
mysql_result($result,$row)
}
//取得上一步
INSERT
*** 作产生的
ID,只对表有AUTO_INCREMENT
ID的 *** 作有效
function
insert_id()
{
return
($id
=
mysql_insert_id($this->dblink))
>=
0
?
$id
:
$this->result($this->query("SELECT
last_insert_id()"),
0)
}
//从结果集提取当前行,以数字为key表示的关联数组形式返回
function
fetch_row($result)
{
return
mysql_fetch_row($result)
}
//从结果集提取当前行,以字段名为key表示的关联数组形式返回
function
fetch_assoc($result)
{
return
mysql_fetch_assoc($result)
}
//从结果集提取当前行,以字段名和数字为key表示的关联数组形式返回
function
fetch_array($result)
{
return
mysql_fetch_array($result)
}
//关闭链接
function
close()
{
return
mysql_close($this->dblink)
}
//输出简单的错误html提示信息并终止程序
function
halt($msg)
{
$message
=
"<html>\n<head>\n"
$message
.=
"<meta
content='text/htmlcharset=gb2312'>\n"
$message
.=
"</head>\n"
$message
.=
"<body>\n"
$message
.=
"数据库出错:".htmlspecialchars($msg)."\n"
$message
.=
"</body>\n"
$message
.=
"</html>"
echo
$message
exit
}
}
?>
php封装mysql类复制代码
代码如下:
<?php
class
Mysql
{
private
$host
private
$user
private
$pwd
private
$dbName
private
$charset
private
$conn
=
null
public
function
__construct()
{
$this->host
=
'localhost'
$this->user
=
'root'
$this->pwd
=
'root'
$this->dbName
=
'test'
$this->connect($this->host,$this->user,$this->pwd)
$this->switchDb($this->dbName)
$this->setChar($this->charset)
}
//负责链接
private
function
connect($h,$u,$p)
{
$conn
=
mysql_connect($h,$u,$p)
$this->conn
=
$conn
}
//负责切换数据库
public
function
switchDb($db)
{
$sql
=
'use'
.
$db
$this->query($sql)
}
//负责设置字符集
public
function
setChar($char)
{
$sql
=
'set
names'
.
$char
$this->query($sql)
}
//负责发送sql查询
public
function
query($sql)
{
return
mysql_query($sql,$this->conn)
}
//负责获取多行多列的select结果
public
function
getAll($sql)
{
$list
=
array()
$rs
=
$this->query($sql)
if
(!$rs)
{
return
false
}
while
($row
=
mysql_fetch_assoc($rs))
{
$list[]
=
$row
}
return
$list
}
public
function
getRow($sql)
{
$rs
=
$this->query($sql)
if(!$rs)
{
return
false
}
return
mysql_fetch_assoc($rs)
}
public
function
getOne($sql)
{
$rs
=
$this->query($sql)
if
(!$rs)
{
return
false
}
return
mysql_fetch_assoc($rs)
return
$row[0]
}
public
function
close()
{
mysql_close($this->conn)
}
}
echo
'<pre>'
$mysql
=
new
Mysql()
print_r($mysql)
$sql
=
"insert
into
stu
values
(4,'wangwu','99998')"
if($mysql->query($sql)){
echo
"query成功"
}else
{
echo
"失败"
}
echo
"<br
/>"
$sql
=
"select
*
from
stu"
$arr
=
$mysql->getAll($sql)
print_r($arr)
?>
<?phpclass db{
private $db
const MYSQL_OPT_READ_TIMEOUT = 11
const MYSQL_OPT_WRITE_TIMEOUT = 12
private $tbl_name
private $where
private $sort
private $fields
private $limit
public static $_instance = null
function __construct(){
$cfg = loadConfig('db')
$db = mysqli_init()
$db->options(self::MYSQL_OPT_READ_TIMEOUT, 3)
$db->options(self::MYSQL_OPT_WRITE_TIMEOUT, 1)
@$db->real_connect($cfg['host'],$cfg['user'],$cfg['pwd'],$cfg['db'])
if ($db->connect_error) {
$this->crash($db->errno,$db->error)
}
$db->set_charset("utf8")
$this->db = $db
//echo $this->db->stat
}
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self()
}
return self::$_instance
}
private function __clone() {} //覆盖__clone()方法,禁止克隆
public function find($conditions = null){
if($conditions) $this->where($conditions)
return $this->getArray($this->buildSql(),1)
}
public function findAll($conditions = null){
if($conditions) $this->where($conditions)
return $this->getArray($this->buildSql())
}
//表
public function t($table){ $this->tbl_name = $tablereturn $this}
//条件
public function where($conditions){
$where = ''
if(is_array($conditions)){
$join = array()
foreach( $conditions as $key =>$condition ){
$condition = $this->db->real_escape_string($condition)
$join[] = "`{$key}` = '{$condition}'"
}
$where = "WHERE ".join(" AND ",$join)
}else{
if(null != $conditions) $where = "WHERE ".$conditions
}
$this->where = $where
return $this
}
//排序
public function sort($sort){
if(null != $sort) $sort = "ORDER BY {$sort}"
$this->sort = $sort
return $this
}
//字段
public function fields($fields){ $this->fields = $fieldsreturn $this}
public function limit($limit){$this->limit = $limitreturn $this}
private function buildSql(){
$this->fields = empty($this->fields) ? "*" : $this->fields
$sql = "SELECT {$this->fields} FROM {$this->tbl_name} {$this->where} {$this->sort}"
accessLog('db_access',$sql)
if(null != $this->limit)$sql .= " limit {$this->limit}"
return $sql
}
/**
* 返回查询数据
* @param $sql
* @param bool $hasOne
* @return array|bool|mixed
*/
private function getArray($sql,$hasOne = false){
if($this->db->real_query($sql) ){
if ($result = $this->db->use_result()) {
$row = array()
if($hasOne){
$row = $result->fetch_assoc()
}else{
while($d = $result->fetch_assoc()) $row[] = $d
}
$result->close()
$this->fields = "*"
return $row
}else{
return false
}
}else{
if($this->db->error){
$this->crash($this->db->errno,$this->db->error,$sql)
}
}
}
public function findSql($sql,$hasOne = false){
accessLog('db_access',$sql)
if($this->db->real_query($sql) ){
if ($result = $this->db->use_result()) {
$row = array()
if($hasOne){
$row = $result->fetch_assoc()
}else{
while($d = $result->fetch_assoc()) $row[] = $d
}
$result->close()
$this->fields = "*"
return $row
}else{
return false
}
}else{
if($this->db->error){
$this->crash($this->db->errno,$this->db->error,$sql)
}
}
}
public function create($row){
if(!is_array($row))return FALSE
$row = $this->prepera_format($row)
if(empty($row))return FALSE
foreach($row as $key =>$value){
$cols[] = '`'.$key.'`'
$vals[] = "'".$this->db->real_escape_string($value)."'"
}
$col = implode(',', $cols)
$val = implode(',', $vals)
$sql = "INSERT INTO `{$this->tbl_name}` ({$col}) VALUES ({$val})"
accessLog('db_access',$sql)
if( FALSE != $this->db->query($sql) ){ // 获取当前新增的ID
if($this->db->insert_id){
return $this->db->insert_id
}
if($this->db->affected_rows){
return true
}
}
return FALSE
}
//直接执行sql
public function runSql($sql){
accessLog('db_access',$sql)
if( FALSE != $this->db->query($sql) ){ // 获取当前新增的ID
return true
}else{
return false
}
}
public function update($row){
$where = ""
$row = $this->prepera_format($row)
if(empty($row))return FALSE
foreach($row as $key =>$value){
$value = $this->db->real_escape_string($value)
$vals[] = "`{$key}` = '{$value}'"
}
$values = join(", ",$vals)
$sql = "UPDATE {$this->tbl_name} SET {$values} {$this->where}"
accessLog('db_access',$sql)
if( FALSE != $this->db->query($sql) ){ // 获取当前新增的ID
if( $this->db->affected_rows){
return true
}
}
return false
}
function delete(){
$sql = "DELETE FROM {$this->tbl_name} {$this->where}"
if( FALSE != $this->db->query($sql) ){ // 获取当前新增的ID
if( $this->db->affected_rows){
return true
}
}
return FALSE
}
private function prepera_format($rows){
$columns = $this->getArray("DESCRIBE {$this->tbl_name}")
$newcol = array()
foreach( $columns as $col ){
$newcol[$col['Field']] = $col['Field']
}
return array_intersect_key($rows,$newcol)
}
//崩溃信息
private function crash($number,$message,$sql=''){
$msg = 'Db Error '.$number.':'.$message
if(empty($sql)){
echo t('db_crash')
}else{
$msg .= " SQL:".$sql
echo t('db_query_err')
}
accessLog('db_error',$msg)
exit
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)