本白演示的代碼屬於較為簡單的數據庫封裝類,較適合初學。因為水平有限,見諒。
接着稍微說說整體的思路。整個類的封裝,包含一個連接數據庫的私有屬性$conn和若干操作函數。$conn在對象實例化的時候,由構造函數處理傳入的參數后返回一個資源型的連接句柄。而后即可通過調用該實例化的對象的相應方法對數據庫進行增刪查改的操作。
talk less and show code:
<?php
/**
*以下代碼用於數據庫操作類的封裝
*
* @author rex<rex.sp.li@aliyun.com>
* @version 1.0
* @since 2015
*/
class Mysql{
//數據庫連接返回值
private $conn;
/**
* [構造函數,返回值給$conn]
* @param [string] $hostname [主機名]
* @param [string] $username[用戶名]
* @param [string] $password[密碼]
* @param [string] $dbname[數據庫名]
* @param [string] $charset[字符集]
* @return [null]
*/
function __construct($hostname,$username,$password,$dbname,$charset='utf8'){
$conn = @mysql_connect($hostname,$username,$password);
if(!$conn){
echo '連接失敗,請聯系管理員';
exit;
}
$this->conn = $conn;
$res = mysql_select_db($dbname);
if(!$res){
echo '連接失敗,請聯系管理員';
exit;
}
mysql_set_charset($charset);
}
function __destruct(){
mysql_close();
}
/**
* [getAll 獲取所有信息]
* @param [string] $sql [sql語句]
* @return [array] [返回二維數組]
*/
function getAll($sql){
$result = mysql_query($sql,$this->conn);
$data = array();
if($result && mysql_num_rows($result)>0){
while($row = mysql_fetch_assoc($result)){
$data[] = $row;
}
}
return $data;
}
/**
* [getOne 獲取單條數據]
* @param [string] $sql [sql語句]
* @return [array] [返回一維數組]
*/
function getOne($sql){
$result = mysql_query($sql,$this->conn);
$data = array();
if($result && mysql_num_rows($result)>0){
$data = mysql_fetch_assoc($result);
}
return $data;
}
/**
* [getOne 獲取單條數據]
* @param [string] $table [表名]
* @param [string] $data [由字段名當鍵,屬性當鍵值的一維數組]
* @return [type] [返回false或者插入數據的id]
*/
function insert($table,$data){
$str = '';
$str .="INSERT INTO `$table` ";
$str .="(`".implode("`,`",array_keys($data))."`) ";
$str .=" VALUES ";
$str .= "('".implode("','",$data)."')";
$res = mysql_query($str,$this->conn);
if($res && mysql_affected_rows()>0){
return mysql_insert_id();
}else{
return false;
}
}
/**
* [update 更新數據庫]
* @param [string] $table [表名]
* @param [array] $data [更新的數據,由字段名當鍵,屬性當鍵值的一維數組]
* @param [string] $where [條件,‘字段名’=‘字段屬性’]
* @return [type] [更新成功返回影響的行數,更新失敗返回false]
*/
function update($table,$data,$where){
$sql = 'UPDATE '.$table.' SET ';
foreach($data as $key => $value){
$sql .= "`{$key}`='{$value}',";
}
$sql = rtrim($sql,',');
$sql .= " WHERE $where";
$res = mysql_query($sql,$this->conn);
if($res && mysql_affected_rows()){
return mysql_affected_rows();
}else{
return false;
}
}
/**
* [delete 刪除數據]
* @param [string] $table [表名]
* @param [string] $where [條件,‘字段名’=‘字段屬性’]
* @return [type] [成功返回影響的行數,失敗返回false]
*/
function del($table,$where){
$sql = "DELETE FROM `{$table}` WHERE {$where}";
$res = mysql_query($sql,$this->conn);
if($res && mysql_affected_rows()){
return mysql_affected_rows();
}else{
return false;
}
}
}
實例化類:
<?php
//包含數據庫操作類文件
include 'mysql.class.php';
//設置傳入參數
$hostname='localhost';
$username='root';
$password='123456';
$dbname='aisi';
$charset = 'utf8';
//實例化對象
$db = new Mysql($hostname,$username,$password,$dbname);
//獲取一條數據
$sql = "SELECT count(as_article_id) as count FROM as_article where as_article_type_id=1";
$count = $db->getOne($sql);
//獲取多條數據
$sql = "SELECT * FROM as_article where as_article_type_id=1 order by as_article_addtime desc limit $start,$limit";
$service = $db->getAll($sql);
//插入數據
$arr = array(
'as_article_title'=>'數據庫操作類',
'as_article_author'=>'rex',
);
$res = $db->insert('as_article',$arr);
//更新數據
$arr = array(
'as_article_title'=>'實例化對象',
'as_article_author'=>'Lee',
);
$where = "as_article_id=1";
$res = $db->update('as_article',$arr,$where);
//刪除數據
$where = "as_article_id=1";
$res = $db->del('as_article',$where);
?>
演示完代碼,大概說幾句。
getOne方法傳入$sql的sql語句用於查詢單條數據並返回一維數組;getAll方法同樣傳入sql語句,用於查詢多條數據,並返回二維數組;insert方法傳入表名和關聯數組,返回boolen型或者插入數據對應索引;update方法傳入表名、關聯數組和條件,返回boolen或者影響的行數;del方法傳入表名和條件,返回boolen型。
that's all,but not the all.有興趣的朋友可以把getOne和getAll直接傳入sql語句作為參數的方式再優化一下。