~~~
<?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_INCREMANT
public static $numRows = null;//受影響記錄的條數
/**
* 構造函數,連接數據庫
*
* @param array|string $dbConfig The database configuration
*
* @return boolean ( description_of_the_return_value )
*/
public function __construct($dbConfig=''){
if(!class_exists("PDO")){
self::throw_exception("不支持PDO,請先開啟");
}
if(!is_array($dbConfig)){
$dbConfig = array(
'hostname' => 'localhost',
'username' => 'root',
'password' => '1234',
'database' => 'test',
'hostport' => '3306',
'dbms' => 'mysql'
);
}
$dns = 'mysql:host='.$dbConfig['hostname'].';dbname='.$dbConfig['database'];
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($dns,$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 utf8");
self::$dbVersion = self::$link->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));
unset($configs);
}
}
/**
* 得到所有記錄
*
* @param <type> $sql The sql
*
* @return <type> All.
*/
public static function getAll($sql=null){
if($sql!=null){
self::query($sql);
}
$result = self::$PDOStatement->fetchAll(constant("PDO::FETCH_ASSOC"));
return $result;
}
/**
* 得到一條記錄
*
* @param <type> $sql The sql
*
* @return <type> The row.
*/
public static function getRow($sql=null){
if($sql!=null){
self::query($sql);
}
$result = self::$PDOStatement->fetch(constant("PDO::FETCH_ASSOC"));
return $result;
}
/**
* 執行增刪改操作,返回受影響記錄的條數
*
* @param <type> $sql The sql
*
* @return boolean ( description_of_the_return_value )
*/
public static function execute($sql=null){
$link = self::$link;
if(!$link)return false;
if($sql!=null){
self::$queryStr = $sql;
}
if(!empty(self::$PDOStatement))self::free();
$result = $link->exec(self::$queryStr);
self::haveErrorThrowException();
if($result){
self::$lastInsertId = $link->lastInsertId();
self::$numRows = $result;
return $result;
}else{
return false;
}
}
/**
* 根據主鍵查找記錄
*
* @param <type> $tabName The tab name
* @param <type> $priId The pri identifier
* @param string $fields The fields
*
* @return <type> ( description_of_the_return_value )
*/
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 <type> $tables The tables
* @param <type> $where The where
* @param string $fields The fields
* @param <type> $group The group
* @param <type> $having The having
* @param <type> $order The order
* @param <type> $limit The limit
*
* @return <type> ( description_of_the_return_value )
*/
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);
$data = self::getAll($sql);
return $data;
}
/**
* 添加記錄
*
* @param <type> $data The data
* @param <type> $table The table
*
* @return <type> ( description_of_the_return_value )
*/
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 {$table}({$fieldsStr}) VALUES({$values})";
return self::execute($sql);
}
/**
* 更新數據
*
* @param <type> $data The data
* @param <type> $table The table
* @param <type> $where The where
* @param <type> $order The order
* @param <type> $limit The limit
*/
public static function update($data,$table,$where=null,$order=null,$limit=null){
$sets = '';
foreach ($data as $key => $value) {
$sets .= $key."='".$value."',";
}
$sets = rtrim($sets,',');
$sql = "UPDATE {$table} SET {$sets}".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
echo $sql;
}
/**
* 刪除數據
*
* @param <type> $data The data
* @param <type> $table The table
* @param <type> $where The where
* @param <type> $order The order
* @param <type> $limit The limit
*
* @return <type> ( description_of_the_return_value )
*/
public static function delete($table,$where=null,$order=null,$limit=null){
$sql = "DELETE FROM {$table} ".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
return self::execute($sql);
}
/**
* 執行查詢
*
* @param string $sql The sql
*
* @return boolean ( description_of_the_return_value )
*/
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;
}
/**
* 獲取最后執行的sql
*
* @return boolean The last sql.
*/
public static function getLastSql(){
$link = self::$link;
if(!$link){
return false;
}
return self::$queryStr;
}
/**
* 獲取最后插入的ID
*
* @return boolean The last insert identifier.
*/
public static function getLastInsertId(){
$link = self::$link;
if(!$link){
return false;
}
return self::$lastInsertId;
}
/**
* 獲得數據庫的版本
*
* @return boolean The database version.
*/
public static function getDbVersion(){
$link = self::$link;
if(!$link){
return false;
}
return self::$dbVersion;
}
/**
* 得到數據庫中表
*
* @return array ( description_of_the_return_value )
*/
public static function showTables(){
$tables = array();
if(self::query("show tables")){
$result = self::getAll();
foreach ($result as $key => $value) {
$tables[$key] = current($value);
}
}
return $tables;
}
/**
* 解析where條件
*
* @param <type> $where The where
*
* @return <type> ( description_of_the_return_value )
*/
public static function parseWhere($where){
$whereStr = '';
if(is_string($where)&&!empty($where)){
$whereStr = $where;
}
return empty($whereStr) ? '' : ' WHERE '.$whereStr;
}
/**
* 解析group
*
* @param <type> $group The group
*
* @return <type> ( description_of_the_return_value )
*/
public static function parseGroup($group){
$groupStr = '';
if(is_array($group)){
$groupStr = implode(',', $group);
}elseif(is_string($group)&&!empty($group)){
$groupStr = $group;
}
return empty($groupStr) ? '' : ' GROUP BY '.$groupStr;
}
/**
* 解析having
*
* @param <type> $having The having
*
* @return <type> ( description_of_the_return_value )
*/
public static function parseHaving($having){
$havingStr = '';
if(is_string($having)&&!empty($having)){
$havingStr = $having;
}
return empty($havingStr) ? '' : ' HAVING '.$havingStr;
}
/**
* 解析order
*
* @param <type> $order The order
*
* @return <type> ( description_of_the_return_value )
*/
public static function parseOrder($order){
$orderStr = '';
if(is_string($order)&&!empty($order)){
$orderStr = $order;
}
return empty($orderStr) ? '' : ' ORDER BY '.$orderStr;
}
/**
* 解析limit
*
* @param <type> $limit The limit
*
* @return <type> ( description_of_the_return_value )
*/
public static function parseLimit($limit){
$limitStr = '';
if(is_array($limit)){
$limitStr = implode(',', $limit);
}elseif(is_string($limit)&&!empty($limit)){
$limitStr = $limit;
}
return empty($limitStr) ? '' : ' LIMIT '.$limitStr;
}
/**
* 解析字段
*
* @param <type> $fields The fields
*
* @return string ( description_of_the_return_value )
*/
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 string $value The value
*
* @return string ( description_of_the_return_value )
*/
public static function addSpecialChar(&$value){
if($value==="*"||strpos($value,'.')!==false||strpos($value,'`')!==false){
//不用做處理
}elseif(strpos($value, '`')===false){
$value = '`'.trim($value).'`';
}
return $value;
}
/**
* 釋放結果集
*/
public static function free(){
self::$PDOStatement = null;
}
/**
* 拋出錯誤信息
*
* @return boolean ( description_of_the_return_value )
*/
public static function haveErrorThrowException(){
$obj = empty(self::$PDOStatement) ? self::$link : self::$PDOStatement;
$arrError = $obj->errorInfo();
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 <type> $errMsg The error message
*/
public static function throw_exception($errMsg){
echo $errMsg;
}
/**
* 銷毀連接對象,關閉數據庫
*/
public static function close(){
self::$link = null;
}
}
~~~
~~~
$pdo = new PdoMysql($config);
dump($pdo->find('clould',"id=1"));
dump($pdo->getLastSql());
~~~
~~~
- 一、php一些常用的校驗
- 1.1、校驗是否為空(null/空串)
- 1.2、校驗是否為純數字
- 1.3、校驗是否為純數字(正則)
- 1.4、檢驗手機號
- 1.5、校驗郵箱格式
- 1.6、檢查密碼長度是否符合規定
- 二、手機類型訪問判斷
- 2.1、判斷是否為手機訪問
- 2.2、判斷是否為微信訪問
- 2.3、判斷是否為Android|IOS訪問
- 2.4、檢查手機格式,中國手機不帶國家代碼,國際手機號格式為:國家代碼-手機號
- 2..5、獲取隨機UA
- 2.6、is_get_post
- 三、字符集文件轉換
- 3.1、utf8轉gbk
- 3.2、gbk轉utf8
- 3.3、繁體轉簡體
- 3.4、簡體轉繁體
- 3.5、unicode轉utf8
- 3.6、utf8轉unicode
- 3.7、Ascii轉拼音
- 3.8、gbk轉拼音
- 3.9、數組 utf8轉gbk
- 3.10、數組 gbk轉utf8
- 3.11、json 處理gbk轉碼utf-8問題( json_encode轉換數組,值為null)
- 3.12、Unicode解碼
- 3.13、【PHP】實現搜索引擎中把搜索結果命中的關鍵字標記紅色
- 3.14、字符串截取
- 3.15、去除字符串中的指定字符
- 四、文檔目錄操作
- 4.1、轉化 \ 為 /
- 4.2、創建目錄
- 4.3、拷貝目錄及下面所有文件
- 4.4、轉換目錄下面的所有文件編碼格式
- 4.5、列出目錄下所有文件
- 4.6、設置目錄下面的所有文件的訪問和修改時間
- 4.7、目錄列表
- 4.8、刪除目錄及目錄下面的所有文件
- 4.9、取得文件擴展
- 4.10、查詢字符是否存在于某字符串
- 4.11、獲取文件目錄列表
- 4.12、刪除一個路徑下的所有文件夾和文件的方法
- 4.13、文件下載
- 4.14、寫入文件日志
- 4.15、移動文件封裝方法
- 五、session與cookie
- 5.1、設置session
- 5.2、讀取session
- 5.3、清除session
- 六、CURL操作
- 6.1、發起get請求
- 6.2、發起post請求
- 6.3、curl獲取跳轉后的網址的url
- 6.4、curl判斷遠程圖片是否加防盜鏈
- 6.5、curl獲取301頁面的內容
- 6.6、curl判斷文件是否存在(404)
- 6.7、php的curl封裝類
- 七、日期、時間與字節轉換
- 7.1、轉換字節數為其他單位(Gb、Mb等)
- 7.2、時間轉換(將秒轉換為時間)
- 7.3、將秒轉換成 天-時分秒
- 7.4、時間轉換(將時分秒轉換為秒)
- 7.5、計算兩個時間相差的天
- 7.6、獲取文件大小并格式化
- 7.7、返回13位時間戳
- 7.8、返回與當前時間的差距,如1分鐘前,2小時前,5月前等
- 7.8、PHP中DateTime的常用方法
- 7.9、生日(身份證號)轉年齡
- 7.10、密碼加密方法
- 八、對象、數組、字符串、轉義等
- 8.1、將數組轉換為對象
- 8.2、將對象轉換為數組
- 8.3、將字符串轉換為數組
- 8.4、將數組轉換為字符串
- 8.5、將文本格式成適合js輸出的字符串
- 8.6、返回經addslashes(轉義)處理過的字符串或數組
- 8.7、返回經stripslashes(刪除反斜杠)處理過的字符串或數組
- 8.8、返回經htmlspecialchars(字符轉html)處理過的字符串或數組
- 8.9、安全過濾函數
- 8.10、xss過濾函數
- 8.11、過濾ASCII碼從0-28的控制字符
- 8.12、格式化文本域內容
- 8.13、將文本格式成適合js輸出的字符串
- 8.14、轉義 javascript 代碼標記
- 8.15、數組轉碼
- 8.16、php用逗號格式化數字
- 8.17、數組去重
- 8.18、字符串去重
- 8.19、數組排序
- 8.20、兼容低版本的array_column
- 8.21、把返回的數據集轉換成Tree
- 8.22、判斷字符串是否為已經序列化過
- 8.23、截取指定兩個字符之間字符串
- 九、加密擴展
- 9.1、簡單的字符串加密、解密函數
- 9.2、簡單的加密解密類【棄用】
- 9.3、簡單對稱加密算法2
- 9.4、常用對稱加密算法(DES/AES)類
- 9.5、3des加密解密類-三重數據加密算法【棄用】
- 9.6、PHP7.* DES的加密解密
- 9.7、加密解密函數
- 十、隨機數、獲取請求ip等
- 10.1、產生隨機字符串
- 10.2、獲取請求ip
- 10.3、生成一定范圍內的隨機數字
- 10.4、生成不重復的隨機數
- 10.5、生成一定數量的隨機數,并且不重復
- 10.6、生成32位隨機數
- 10.7、生成9位隨機數字(可以做qq用)
- 10.8、創建優惠券、會員卡號
- 10.9、php判斷是否梯子訪問
- 10.10 IP地區判斷
- 10.11獲取操作系統、瀏覽器信息
- 10.12、根據各種類型變量生成唯一標識符
- PHP 生成不重復唯一標識 session_create_id()
- 十一、其他
- 11.1、php對html頁面壓縮函數
- 11.2、構建層級(樹狀)數組、
- 11.3、獲取內容中的圖片
- 11.4、生成sql語句,如果傳入$in_cloumn 生成格式為 IN('a', 'b', 'c')
- 11.5、打印各種類型的數據,調試程序時使用。
- 11.6、URL重定向
- 11.7、替換html代碼里的所有圖片的url,新增url
- 11.8、去除html里的p標簽
- 11.9、去除字符串中所有html代碼(格式化代碼html)
- 11.10、將number_format的輸出轉換為php數字
- 11.11、使用Jquery插件jsonview來展示json數據
- 11.12、input()接收數據(get,post等)
- 11.13、return_json
- 11.14、圖片合成
- 11.15、將var_export 格式化為5.4數組
- 11.16、生成文件后綴圖片
- 11.17、跨域檢測
- 11.18、切分SQL文件成多個可以單獨執行的sql語句
- 11.19、XML編碼
- 11.20、分享URL壓縮
- 11.21、PHP抓取遠程圖片到本地保存
- 11.22、PHP網址縮短算法代碼(修復PHP7.0問題)
- 11.23、input xss clear
- 11.24、獲取遠程圖片顯示(遠程403)
- 11.24、xml轉數組以及數組轉xml
- 11.7、內容里批量替換圖片的url地址為自己的地址
- 十二、類庫
- 1、php 5.6.3PHP封裝的數據庫模型Model類完整示例【基于PDO】
- 2、Curl類庫
- 3、php PDO數據庫類庫
- 4、獲取網站title
- 5、極光推送類
- 6、php中文轉拼音類
- 7、php 提取HTML文章中的圖片地址類
- 8、php FTP操作類
- php獲取MAC地址
- 9、【PHP】使用phpoffice/phpexcel,導入導出數據
- 10、根據ip解析為地區-省市
- 11、PHP PUT方式上傳
- 12、Env環境變量類庫
- 13、圖片裁剪并緩存
- 14、翻譯類庫【有道、百度】
- 15、xml數據的創建與讀取
- 16、微信公眾號關鍵詞自動回復
- 17、功能強大的php文件上傳類