對於PHP開發中使用框架還好。如果不是使用MVC框架的話,你如果通過程式碼來操作插入一條記錄,你說說需要幾行?? 本人在平時的積累的基礎上基於PDO封裝了資料庫操作類。
<?php
//header('content-type:text/html;charset=utf-8');
class PdoMySQL{
public static $config=array();//設定連線引數,配置資訊
public static $link=null;//儲存連線識別符號
public static $pconnect=false;//是否開啟長連線
public static $dbVersion=null;//儲存資料庫版本
public static $connected=false;//是否連線成功
public static $PDOStatement=null;//儲存PDOStatement物件
public static $queryStr=null;//儲存最後執行的操作
public static $error=null;//報錯錯誤資訊
public static $lastInsertId=null;//儲存上一步插入操作產生AUTO_INCREMENT
public static $numRows=0;//上一步操作產生受影響的記錄的條數
/**
* 連線PDO
* @param string $dbConfig
* @return boolean
*/
public function __construct($dbConfig=''){
if(!class_exists("PDO")){
self::throw_exception('不支援PDO,請先開啟');
}
if(!is_array($dbConfig)){
$dbConfig=array(
'hostname'=>DB_HOST,
'username'=>DB_USER,
'password'=>DB_PWD,
'database'=>DB_NAME,
'hostport'=>DB_PORT,
'dbms'=>DB_TYPE,
'dsn'=>DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME
);
}
if(empty($dbConfig['hostname']))self::throw_exception('沒有定義資料庫配置,請先定義');
self::$config=$dbConfig;
if(empty(self::$config['params']))self::$config['params']=array();
if(!isset(self::$link)){
$configs=self::$config;
if(self::$pconnect){
//開啟長連線,新增到配置陣列中
$configs['params'][constant("PDO::ATTR_PERSISTENT")]=true;
}
try{
self::$link=new PDO($configs['dsn'],$configs['username'],$configs['password'],$configs['params']);
}catch(PDOException $e){
self::throw_exception($e->getMessage());
}
if(!self::$link){
self::throw_exception('PDO連線錯誤');
return false;
}
self::$link->exec('SET NAMES '.DB_CHARSET);
self::$dbVersion=self::$link->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));
self::$connected=true;
unset($configs);
}
}
/**
* 得到所有記錄
* @param string $sql
* @return unknown
*/
public static function getAll($sql=null){
if($sql!=null){
self::query($sql);
}
$result=self::$PDOStatement->fetchAll(constant("PDO::FETCH_ASSOC"));
return $result;
}
/**
* 得到結果集中的一條記錄
* @param string $sql
* @return mixed
*/
public static function getRow($sql=null){
if($sql!=null){
self::query($sql);
}
$result=self::$PDOStatement->fetch(constant("PDO::FETCH_ASSOC"));
return $result;
}
/**
* 根據主鍵查詢記錄
* @param string $tabName
* @param int $priId
* @param string $fields
* @return mixed
*/
public static function findById($tabName,$priId,$fields='*'){
$sql='SELECT %s FROM %s WHERE id=%d';
return self::getRow(sprintf($sql,self::parseFields($fields),$tabName,$priId));
}
/**
* 執行普通查詢
* @param unknown $tables
* @param string $where
* @param string $fields
* @param string $group
* @param string $having
* @param string $order
* @param string $limit
* @return Ambigous <unknown, unknown, multitype:>
*/
public static function find($tables,$where=null,$fields='*',$group=null,$having=null,$order=null,$limit=null){
$sql='SELECT '.self::parseFields($fields).' FROM '.'`'.$tables.'`'
.self::parseWhere($where)
.self::parseGroup($group)
.self::parseHaving($having)
.self::parseOrder($order)
.self::parseLimit($limit);
// echo $sql;
$dataAll=self::getAll($sql);
// return count($dataAll)==1?$dataAll[0]:$dataAll;
return $dataAll;
}
/**
* 新增記錄的操作
* @param array $data
* @param string $table
* @return Ambigous <boolean, unknown, number>
*/
public static function add($data,$table){
$keys=array_keys($data);
array_walk($keys,array('PdoMySQL','addSpecialChar'));
$fieldsStr=join(',',$keys);
$values="'".join("','",array_values($data))."'";
$sql="INSERT INTO `{$table}`({$fieldsStr}) VALUES({$values})";
// echo $sql;
return self::execute($sql);
}
/**
* 更新記錄
* @param array $data
* @param string $table
* @param string $where
* @param string $order
* @param string $limit
* @return Ambigous <boolean, unknown, number>
*/
public static function update($data,$table,$where=null,$order=null,$limit=0){
foreach($data as $key=>$val){
$sets.="`".$key."`='".$val."',";
}
$sets=rtrim($sets,',');
$sql="UPDATE {$table} SET {$sets} ".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
// echo $sql;
return self::execute($sql);
}
/**
* 刪除記錄的操作
* @param string $table
* @param string $where
* @param string $order
* @param number $limit
* @return Ambigous <boolean, unknown, number>
*/
public static function delete($table,$where=null,$order=null,$limit=0){
$sql="DELETE FROM `{$table}` ".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
return self::execute($sql);
}
/**
*
*/
public static function truncate($table){
$sql="TRUNCATE TABLE `{$table}` ";
return self::execute($sql);
}
/**
* 得到最後執行的SQL語句
* @return boolean|Ambigous <string, string>
*/
public static function getLastSql(){
$link=self::$link;
if(!$link)return false;
return self::$queryStr;
}
/**
* 得到上一步插入操作產生AUTO_INCREMENT
* @return boolean|string
*/
public static function getLastInsertId(){
$link=self::$link;
if(!$link)return false;
return self::$lastInsertId;
}
/**
* 得到資料庫的版本
* @return boolean|mixed
*/
public static function getDbVerion(){
$link=self::$link;
if(!$link)return false;
return self::$dbVersion;
}
/**
* 得到資料庫中資料表
* @return multitype:mixed
*/
public static function showTables(){
$tables=array();
if(self::query("SHOW TABLES")){
$result=self::getAll();
foreach($result as $key=>$val){
$tables[$key]=current($val);
}
}
return $tables;
}
/**
* 解析Where條件
* @param unknown $where
* @return string
*/
public static function parseWhere($where){
$whereStr='';
if(is_string($where)&&!empty($where)){
$whereStr=$where;
}
return empty($whereStr)?'':' WHERE '.$whereStr;
}
/**
* 解析group by
* @param unknown $group
* @return string
*/
public static function parseGroup($group){
$groupStr='';
if(is_array($group)){
$groupStr.=' GROUP BY '.implode(',',$group);
}elseif(is_string($group)&&!empty($group)){
$groupStr.=' GROUP BY '.$group;
}
return empty($groupStr)?'':$groupStr;
}
/**
* 對分組結果通過Having子句進行二次刪選
* @param unknown $having
* @return string
*/
public static function parseHaving($having){
$havingStr='';
if(is_string($having)&&!empty($having)){
$havingStr.=' HAVING '.$having;
}
return $havingStr;
}
/**
* 解析Order by
* @param unknown $order
* @return string
*/
public static function parseOrder($order){
$orderStr='';
if(is_array($order)){
$orderStr.=' ORDER BY '.join(',',$order);
}elseif(is_string($order)&&!empty($order)){
$orderStr.=' ORDER BY '.$order;
}
return $orderStr;
}
/**
* 解析限制顯示條數limit
* limit 3
* limit 0,3
* @param unknown $limit
* @return unknown
*/
public static function parseLimit($limit){
$limitStr='';
if(is_array($limit)){
if(count($limit)>1){
$limitStr.=' LIMIT '.$limit[0].','.$limit[1];
}else{
$limitStr.=' LIMIT '.$limit[0];
}
}elseif(is_string($limit)&&!empty($limit)){
$limitStr.=' LIMIT '.$limit;
}
return $limitStr;
}
/**
* 解析欄位
* @param unknown $fields
* @return string
*/
public static function parseFields($fields){
if(is_array($fields)){
array_walk($fields,array('PdoMySQL','addSpecialChar'));
$fieldsStr=implode(',',$fields);
}elseif(is_string($fields)&&!empty($fields)){
if(strpos($fields,'`')===false){
$fields=explode(',',$fields);
array_walk($fields,array('PdoMySQL','addSpecialChar'));
$fieldsStr=implode(',',$fields);
}else{
$fieldsStr=$fields;
}
}else{
$fieldsStr='*';
}
return $fieldsStr;
}
/**
* 通過反引號引用欄位,
* @param unknown $value
* @return string
*/
public static function addSpecialChar(&$value){
if($value==='*'||strpos($value,'.')!==false||strpos($value,'`')!==false){
//不用做處理
}elseif(strpos($value,'`')===false){
$value='`'.trim($value).'`';
}
return $value;
}
/**
* 執行增刪改操作,返回受影響的記錄的條數
* @param string $sql
* @return boolean|unknown
*/
public static function execute($sql=null){
$link=self::$link;
if(!$link) return false;
self::$queryStr=$sql;
if(!empty(self::$PDOStatement))self::free();
$result=$link->exec(self::$queryStr);
self::haveErrorThrowException();
if($result || $result==0){
self::$lastInsertId=$link->lastInsertId();
self::$numRows=$result;
return self::$numRows;
}else{
return false;
}
}
/**
釋放結果集
*/
public static function free(){
self::$PDOStatement=null;
}
public static function query($sql=''){
$link=self::$link;
if(!$link) return false;
//判斷之前是否有結果集,如果有的話,釋放結果集
if(!empty(self::$PDOStatement))self::free();
self::$queryStr=$sql;
self::$PDOStatement=$link->prepare(self::$queryStr);
$res=self::$PDOStatement->execute();
self::haveErrorThrowException();
return $res;
}
public static function haveErrorThrowException(){
$obj=empty(self::$PDOStatement)?self::$link: self::$PDOStatement;
$arrError=$obj->errorInfo();
//print_r($arrError);
if($arrError[0]!='00000'){
self::$error='SQLSTATE: '.$arrError[0].' <br/>SQL Error: '.$arrError[2].'<br/>Error SQL:'.self::$queryStr;
self::throw_exception(self::$error);
return false;
}
if(self::$queryStr==''){
self::throw_exception('沒有執行SQL語句');
return false;
}
}
/**
* 自定義錯誤處理
* @param unknown $errMsg
*/
public static function throw_exception($errMsg){
echo '<div style="width:80%;background-color:#ABCDEF;color:black;font-size:20px;padding:20px 0px;">
'.$errMsg.'
</div>';
}
/**
* 銷燬連線物件,關閉資料庫
*/
public static function close(){
self::$link=null;
}
public static function search($table1,$table2,$table3){
$PdoMySQL=new PdoMySQL();
$sql1="select * from ".$table1." where status='0'";
$sql2="select * from ".$table2." where status='0'";
$sql3="select * from ".$table3." where status='0'";
$stmt1=$PdoMySQL->prepare($sql1);
$stmt2=$PdoMySQL->prepare($sql2);
$stmt3=$PdoMySQL->prepare($sql3);
$stmt1->execute();
$stmt2->execute();
$stmt3->execute();
//echo $username.'<hr/>'.$password;
$row1=$stmt1->fetch();
echo $row1[0];
}
}
?>
複製程式碼
最後還有一個超級大BOSS,一個公司企業官網,功能強大,有介面封裝類、圖片上傳(單圖、多圖)、前端 Bootstrap、REST風格的介面。