PHP-lib-mysql.func.php-封装mysqli数据库操作(单例模式)
mysql.func.php
<?php
/**
* 说明:废弃 ! 连接数据库的操作
* 作者:
* @return resource
* 创建时间:2058-3-21 下午09:32:58
*/
function connect(){
$link= mysqli_connect(DB_HOST,DB_USER,DB_PWD) or die('数据库失败Error:'.mysqli_errno().':'.mysqli_error());
mysqli_set_charset($link,DB_CHARSET);
mysqli_select_db($link,DB_DBNAME) or die('指定数据库打开失败');
//$link较高版本中这个$link获取传入到mysql_query()方法中.
// $link = Db::getInstance()->connect();
return $link;
}
/**
* 说明:单例模式获取的数据库连接对象,本页面代码所有连接、操作数据库都采用较高版本的mysqli_*方法
* 作者:
* 创建时间:2058-3-21 下午10:42:22
*/
function getDbConn(){
$link = Db::getInstance()->connect();
return $link;
}
/**
* 说明:完成记录插入的操作
* 作者:
* @param string $table
* @param array $array
* @return number
* 创建时间:2058-3-21 下午09:32:40
*/
function insert($table,$array){
$keys = join(",", array_keys($array));//啥意思?
$vals = "'".join("','", array_values($array))."'";
// 首尾"'"分别添加,中间把$array分割并使用','拼接
$sql = "insert into {$table}($keys) values({$vals})";
//var_dump($sql);
//exit();
mysqli_query(getDbConn(),$sql);
return mysqli_insert_id(getDbConn());
}
/**
* 说明:完成记录插入操作
* 作者:
* @param string $table
* @param array $array
* @param string $where
* @return number 返回-1 表示失败,至少要判断 >0
* 创建时间:2058-3-21 下午09:42:56
*/
// update imooc_admin set username='king' where id = 1;
function update($table,$array,$where=null){
$str=null;
foreach ($array as $key=>$val){
if($str==null){
$sep="";
}else{
$sep=",";
}
$str.=$sep.$key."='".$val."'";
}
$sql ="update {$table} set {$str}".($where == null?null:" where ".$where);
$result = mysqli_query(getDbConn(),$sql);//这里的失败会返回false 优化
if($result){//这里必须判断
return mysqli_affected_rows(getDbConn());
}else{
return false;
}
}
/**
* 说明:删除记录
* 作者:
* @param string $table
* @param string $where
* @return number 返回-1 表示失败,至少要判断 >0
* 创建时间:2058-3-21 下午09:46:27
*/
function delete($table,$where){
$where =($where ==null?null:" where ".$where);
$sql = "delete from {$table}{$where}";
$result = mysqli_query(getDbConn(),$sql);//这里的失败会返回false 优化
if($result){//这里必须判断
return mysqli_affected_rows(getDbConn());
}else{
return false;
}
}
/**
* 说明:得到制定的一条记录
* 作者:
* @param string $sql
* @param string $result_type
* @return multitype:
* 创建时间:2058-3-21 下午09:49:11
*/
function fetchOne($sql,$result_type=MYSQLI_ASSOC){
$result = mysqli_query(getDbConn(),$sql);
$row = mysqli_fetch_array($result,$result_type);
return $row;
}
/**
* 说明:得到结果集的所有记录
* 作者:
* @param string $sql
* @param string $result_type
* @return multitype:
* 创建时间:2058-3-21 下午09:52:20
*/
function fetchAll($sql,$result_type=MYSQLI_ASSOC){
$result = mysqli_query(getDbConn(),$sql);
//var_dump($sql);
$rows = array();//这里要定义一下
while (@$row = mysqli_fetch_array($result,$result_type)){
$rows[] = $row;
}
return $rows;
}
/**
* 说明:得到结果集的条数
* 注意:发现此方法会自动对单引号转义 导致出错 后期查看原项目中的用法
* 暂时使用fetchAll代替
* 作者:
* @param string $sql
* @return number
* 创建时间:2058-3-21 下午09:54:19
*/
function getResultNum($sql){
$result = mysqli_query(getDbConn(),$sql);
return mysqli_num_rows($result);
}
/**
* 得到上一步插入记录的id
*/
function getInsertId(){
return mysqli_insert_id(getDbConn());
}
class Db{
private static $_instance;
private static $_connectSource;
private $_dbConfig =array(//DB_USER,DB_PWD
'host'=>DB_HOST,
'user'=>DB_USER,
'password'=>DB_PWD,
'database'=>DB_DBNAME
);
private function __construct(){
}
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self();
}
return self::$_instance;
}
/*
* 注意在php较高版本中,本次测试环境是php5.5,mysqli_select_db 和 mysqli_query 的参数顺序与
* mysql_select_db()和 mysql_query()的顺序正好相反。mysqli_*** 为新方法。
*/
public function connect(){
if(!self::$_connectSource ){
self::$_connectSource = mysqli_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']);
if(!self::$_connectSource){
throw new Exception("mysql connect error ".mysqli_connect_error());//无mysqli.error() 方法
return;
//die("mysql connect error ".mysql.error());
}
mysqli_select_db(self::$_connectSource ,$this->_dbConfig['database']);
mysqli_query(self::$_connectSource,"set names UTF8");
}
return self::$_connectSource;
}
}
正文到此结束