検索
ホームページphp教程php手册PDO データベース操作クラス コードをカプセル化する

PDO データベース操作クラス コードをカプセル化する

Jun 13, 2016 pm 12:22 PM
classpdophpコードコピーカプセル化操作するデータベース親切

コードをコピー コードは次のとおりです:


/**
* データベース PDO 操作
*/
class MysqlPdo {
public static $PDOStatement = null;
/**
* データベース接続パラメータの設定
* @var array
* @access public
*/
パブリック静的 $config = array();
/**
* 永続接続を使用するかどうか
* @var bool
* @access public
*/
パブリック静的 $pconnect = false
/**
* エラーメッセージ
* @var string
* @access public
*/
パブリック静的 $error = '';
/**
* シングルトン モード、Pdo クラスの唯一のインスタンスとデータベースの接続リソースを保存します
* @var object
* @access public
*/
保護された静的 $link;
/**
* データベースが接続されているかどうか
* @var bool
* @access public
*/
パブリック static $connected = false; 🎝>*/
public static $dbVersion = null;
/**
* データベースのバージョン
* @var string
* @access public
*/
public static $queryStr = ''; public static $lastInsertId = null;
/**
* 現在の SQL ステートメント
* @var string
* @access public
*/
public static $numRows = 0;
//トランザクション命令数
public static $transTimes = 0; / **
* 最後に挿入されたレコードの ID
* @var integer
* @access public
*/
public function __construct($dbConfig=''){
if (!class_exists('PDO')) throw_Exception("サポートされていません: PDO"); if パラメータが送信されない場合は、デフォルトのデータ定義が使用されます。
if (!is_array($dbConfig)) {
$dbConfig = array(
'hostname' => DB_HOST,
'username ' = > DB_USER、
'パスワード' => DB_NAME、
'dbms' =>
'dsn' => DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME
)
}
if(empty($dbConfig['hostname']); ) throw_Exception ("データベース構成が定義されていません");
self::$config = $dbConfig
if(empty(self::$config['params'])) self::$config['params '] = array();
/**
* 影響を受けるレコードの数を返します
* @var integer
* @access public
*/
if (!isset(self::$link) ) {
$configs = self::$config; (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) {
throw_Exception( $e->getMessage());
//exit('接続に失敗しました:'.$e->getMessage());
}
if(!self::$link ) {
throw_Exception('PDO CONNECT ERROR');
return false;
self::$link->exec('SET NAMES '.DB_CHARSET); :$ dbVersion = self::$link->getAttribute(constant("PDO::ATTR_SERVER_INFO"));
// 接続が成功したとマークします
self::$connected = true;データベース接続からログアウトします 設定情報
unset($configs)>}
return self::$link
}
/**
* コンストラクター、
* @param $dbconfig データベース接続関連情報、array('ServerName', 'UserName', 'Password', 'DefaultDb', 'DB_Port', 'DB_TYPE')
*/
static function free() {
self::$PDOStatement = null
}
/*************************************ゴージャスな仕切り************ *********************************/
/* データベース操作*/
/
* クエリ結果を公開
* @access 関数
*** /
/* ************************************************** ************************************************* ***/
static function getAll($sql=null) {
self::query($sql);
//データセットを返します
$result = self::$PDOStatement ->fetchAll(constant('PDO::FETCH_ASSOC'));
return $result;
/*************************************************** ************************************************* ***/
static function getRow ($sql=null) {
self::query($sql);
// 配列セットを返します
$result = self::$PDOStatement->fetch(constant('PDO::FETCH_ASSOC) '),constant(' PDO::FETCH_ORI_NEXT'));
return $result;
/**
* すべてのクエリ データを取得
* @access 関数
* @return 配列
*/
静的関数 doSql($sql='') {
if(self ::isMainIps($sql)) {
return self::execute($sql);
}else {
return self::getAll($sql); }
}
/**
* クエリ結果の取得
* @access 関数
* @param string $sql SQL コマンド
* @param integer $seek ポインタ位置
* @return array
*/
静的関数 findById($tabName,$priId,$fields='*'){
$sql = 'SELECT %s FROM %s WHERE id=%d' ;
return self::getRow(sprintf($sql, self::parseFields($fields), $tabName, $priId));
/**
* レコード検索
* @access 関数
* @param string $tables データテーブル名
* @parammixed $where クエリ条件
* @param string $fields フィールド名
* @param string $ordersort
* @param string $limit 取得するデータの数
* @param string $group grouping
* @param string $having
* @param boolean $ Lock Lock
* @return ArrayObject
を追加するかどうか*/
static function find($tables,$where="",$fields='*',$order=null,$limit=null,$group=null,$ being=null) {
$sql = 'SELECT '.self::parseFields($fields)
.' FROM '.$tables
.self::parseWhere($where)
.self::parseGroup($group)
.self::parseHaving($having)
.self::parseOrder( $order)
.self::parseLimit($limit);
$dataAll = self::getAll($sql);
if(count($dataAll)==1){$rlt=$dataAll[0];}else{$rlt=$dataAll;}
return $rlt;
}
/**
* 挿入 (単一) レコード
* @access 関数
* @parammixed $data data
* @param string $table データテーブル名
* @return integer
*/
static function add($data,$table) {
//过滤提交数据
$data=self::filterPost($table ,$data);
foreach ($data as $key=>$val){
if(is_array($val) && strto lower($val[0]) == 'exp') {
$val = $ val[1]; // 表达式を使用します ???
}elseif (is_scalar($val)){
$val = self::fieldFormat($val);
}else{
// 去掉复合对オブジェクト
続行;
}
$data[$key] = $val;
}
$fields = array_keys($data);
array_walk($fields, array($this, 'addSpecialChar'));
$fieldsStr = implode(',', $fields);
$values = array_values($data);
$valuesStr = implode(',', $values);
$sql = 'INSERT INTO '.$table.' ('.$fieldsStr.') VALUES ('.$valuesStr.')';
return self::execute($sql);
}
/**
* レコード更新
* @access 関数
* @parammixed $sets data
* @param string $table データテーブル名
* @param string $where 更新条件
* @param string $limit
* @param string $order
* @return integer
*/
static function update($sets,$table,$where,$limit=0,$order='') {
$sets = self ::filterPost($table,$sets);
$sql = 'UPDATE '.$table.' SET '.self::parseSets($sets).self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
return self::execute($sql);
}
/**
* 特定のフィールドの値を保存します
* @access function
* @param string $field 保存するフィールドの名前
* @param string $value フィールドの値
* @param string $ table data table
* @param string $where 保存条件
* @param boolean $asString フィールド値が文字列かどうか
* @return void
*/
static function setField($field, $value, $table, $condition="", $asString=false) {
// 如果有'(' SQL命令更新否か更新文字列内容は纯字符串
if(false === strpos($value,'(') || $asString) $value = '"'.$value.' "';
$sql = 'UPDATE '.$table.' SET '.$field.'='.$value.self::parseWhere($condition);
return self::execute($sql );
}
/**
* レコードの削除
* @access function
* @parammixed $where は条件付きマップ、配列、または文字列
* @param string $table データテーブル名
* @param string $limit
* @param string $order
* @return integer
*/
静的関数 Remove($where,$table,$limit='',$order='') {
$sql = ' DELETE FROM '.$table.self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
return self::execute($sql); }
/**
----------------------------------------------- -----------
* データの変更または保存 (単一テーブル操作の場合のみ)
* 主キー ID がある場合は変更され、主キー ID がない場合は変更されます
* レコードを変更します:
--------------------------------- ----------------- ---------------------
* @アクセス関数
-- ------------------------ ------------------------ -------
* @param $tabName テーブル名
* @param $aPost フォーム $_POST を送信
* @param $priId 主キー ID
* @param $aNot A フィールドまたは除外される配列
* @param $aCustom データベースに追加され、保存されたカスタマイズされた配列
* @param $isExits すでに存在するかどうか 存在するかどうか: true、存在しない: false
--- --------------------------------- ------------------- -------
* @return Boolean 変更または保存が成功したかどうか
-------- ------- --------------------------------
*/
静的関数 saveOrUpdate($tabName, $aPost, $priId="", $aNot="", $aCustom="", $isExits=false) {
if(empty($tabName) || !is_array($aPost) || is_int($aNot)) return false;
if(is_string($aNot) && !empty($aNot)) $aNot = 配列($aNot);
if(is_array($aNot) && is_int(key($aNot))) $aPost = array_diff_key($aPost, array_flip($aNot)); && is_string(key($aCustom))) $aPost = array_merge($aPost,$aCustom);
if (empty($priId) && !$isExits) { //新增
$aPost = array_filter( $aPost, array($this, 'removeEmpty'));
return self::add($aPost, $tabName);
} else { //修正
return self::update($aPost, $tabName, "id=".$priId);
}
}
/**
* 最新のクエリの SQL ステートメントを取得します
* @access function
* @param
* @return String 実行された SQL
*/
static function getLastSql() {
$link = self::$link;
if (!$link ) は false を返します。
return self::$queryStr;
}
/**
* 最後に挿入された ID を取得します
* @access function
* @param
* @return integer 最後に挿入されたデータ ID
*/
static function getLastInsId(){
$link = self::$link;
if (!$link ) は false を返します。
self::$lastInsertId を返します;
}
/**
* DB バージョンの取得
* @access 関数
* @param
* @return string
*/
static function getDbVersion(){
$link = self::$link;
if (!$link ) は false を返します。
self::$dbVersion を返します;
}
/**
* データベーステーブル情報の取得
* @access function
* @return array
*/
static function getTables() {
$info = array();
if(self::query("SHOW TABLES")) {
$result = self::getAll();
foreach ($result as $key => $val) {
$info[$key] = current($val);
}
}
$info を返します。
}
/**
* データテーブルのフィールド情報を取得
* @access function
* @return array
*/
static function getFields($tableName) {
// 获取数据库联接
$link = self::$link;
$sql = "SELECT
ORDINAL_POSITION ,COLUMN_NAME, COLUMN_TYPE, DATA_TYPE,
IF(ISNULL(CHARACTER_MAXIMUM_LENGTH), (NUMERIC_PRECISION NUMERIC_SCALE), CHARACTER_MAXIMUM_LENGTH) AS MAXCHAR,
IS_NULLABLE, N_DEFAULT、COLUMN_KEY、EXTRA、 COLUMN_COMMENT
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = :tabName AND TABLE_SCHEMA='".DB_NAME."'";
self::$queryStr = sprintf($sql, $tableName);
$sth = $link->prepare($sql);
$sth->bindParam(':tabName', $tableName);
$sth->execute();
$result = $sth->fetchAll(constant('PDO::FETCH_ASSOC'));
$info = array();
foreach ($result as $key => $val) {
$info[$val['COLUMN_NAME']] = array(
'postion' => $val['ORDINAL_POSITION'] ,
'name' => $val['COLUMN_NAME'],
'type' => $val['COLUMN_TYPE'],
'd_type' => ]、
'length' => $val['MAXCHAR']、
'notnull' => (strto lower($val['IS_NULLABLE']) == "no")、
'デフォルト' => $val['COLUMN_DEFAULT'],
'primary' => (strto lower($val['COLUMN_KEY']) == 'pri'),
'autoInc' => strto lower($val['EXTRA']) == 'auto_increment'),
'コメント' => $val['COLUMN_COMMENT']
);
}
// 有错误则抛出异常
self::haveErrorThrowException();
$info を返します;
}
/**
* データベースを閉じる
* @access 関数
*/
static function close() {
self::$link = null;
}
/**
* SQL コマンドのセキュリティ フィルタリング
* @access 関数
* @param string $str SQL コマンド
* @return string
*/
static functionscape_string($str) {
returnaddslashes($str);
}
/************************************************* ************************************************* *****/
/* 内部操作方法 */
/************************************************* ************************************************* *****/
/**
* エラーが発生し、例外がスローされます
* @access function
* @return
*/
静的関数 haveErrorThrowException() {
$obj = empty(self::$PDOStatement) ? self::$link : self::$PDOStatement;
$arrError = $obj->errorInfo();
if(count($arrError) > 1) { // 错误情報あり
//$this->rollback();
self::$error = $arrError[2]。 "

[ SQL语 ] : ".self::$queryStr;
//throw_Exception($this->error);
throw_Exception(self::$error);
false を返します。
}
// 主要针对execute() メソッド抛出异常
if(self::$queryStr=='')throw_Exception('クエリは空でした

[ SQL语句 ] :');
}
/**
* where 分析
* @access 関数
* @parammixed $where クエリ条件
* @return string
*/
静的関数 parseWhere($where) {
$whereStr = '';
if(is_string($where) || is_null($where)) {
$whereStr = $where;
}
return empty($whereStr)?'':' WHERE '.$whereStr;
}
/**
* order分析
* @access function
* @param mixed $order 排序
* @return string
*/
静的関数 parseOrder($order) {
$orderStr = '';
if(is_array($order))
$orderStr .= ' ORDER BY '.implode(',', $order);
else if(is_string($order) && !empty($order))
$orderStr .= ' ORDER BY '.$order;
$orderStr を返す;
}
/**
* limit分析
* @access function
* @param string $limit
* @return string
*/
静的関数 parseLimit($limit) {
$limitStr = '';
if(is_array($limit)) {
if(count($limit)>1)
$limitStr .= ' LIMIT '.$limit[0].' 、「.$limit[1].」 ';
else
$limitStr .= ' LIMIT '.$limit[0].' ';
} else if(is_string($limit) && !empty($limit)) {
$limitStr .= ' LIMIT '.$limit.' ';
}
$limitStr を返す;
}
/**
* group分析
* @access function
* @parammixed $group
* @return string
*/
静的関数 parseGroup($group) {
$groupStr = '';
if(is_array($group))
$groupStr .= ' GROUP BY '.implode(',', $group);
else if(is_string($group) && !empty($group))
$groupStr .= ' GROUP BY '.$group;
return empty($groupStr)?'':$groupStr;
}
/**
* getting分析
* @access function
* @param string $having
* @return string
*/
静的関数 parseHaving($having) {
$havingStr = '';
if(is_string($having) && !empty($having))
$havingStr .= ' HAVING '.$having;
$havingStr を返す;
}
/**
* フィールド分析
* @access function
* @parammixed $fields
* @return string
*/
static function parseFields($fields) {
if(is_array($fields)) {
array_walk($fields, array($this) , 'addSpecialChar'));
$fieldsStr = implode(',', $fields);
}else if(is_string($fields) && !empty($fields)) {
if( false === strpos($fields,'`') ) {
$fields =explode(' ,',$フィールド);
array_walk($fields, array($this, 'addSpecialChar'));
$fieldsStr = implode(',', $fields);
}else {
$fieldsStr = $fields;
}
}else $fieldsStr = '*';
$fieldsStr を返す;
}
/**
* データ更新時に呼び出される分析を設定します
* @access function
* @parammixed $values
* @return string
*/
プライベート関数 parseSets($sets) {
$setsStr = '';
if(is_array($sets)){
foreach ($sets as $key=>$val){
$key = self::addSpecialChar($key);
$val = self::fieldFormat($val);
$setsStr .= "$key = ".$val.",";
}
$setsStr = substr($setsStr,0,-1);
}else if(is_string($sets)) {
$setsStr = $sets;
}
$setsStr を返します。
}
/**
* フィールドの書式設定
* @access function
* @parammixed $value
* @returnmixed
*/
静的関数 fieldFormat(&$value) {
if(is_int($value)) {
$value = intval($value) ;
} else if(is_float($value)) {
$value = floatval($value);
} elseif(preg_match('/^(w*( |-|*|/)?w*)$/i',$value)){
// 在字段の值里面直接使用をサポートします。字段
// 例 (スコア 1) (名前) 必須包含号
$value = $value;
}else if(is_string($value)) {
$value = '''.self::escape_string($value).''';
}
$value を返します。
}
/**
*
の行にあるフィールド名とテーブル名に ` を追加します。* 命令で使用されているキーワードが mysql に対して正しいことを確認してください。
* @access function
* @parammixed $value
* @return混合
*/
static function addSpecialChar(&$value) {
if( '*' == $value || false !== strpos($value, '(') || false !== strpos($value,'.') || false !== strpos($value,'`')) {
//如果包含* または使用了sql メソッド不作处処理
} elseif(false === strpos($value,'`') ) {
$value = '`'.trim($value).'`'
}
$value を返す;
}
/**
----------------------------------------------- ----------
* 空の要素を削除
------------------------ ---- ------------------------
* @access 関数
---------- ----- ----------------------------------------
* @parammixed$値
-------------------------------------- ----- -------------
* @returnmixed
----------------------- ---- ----------------------------
*/
静的関数 RemoveEmpty($value){
return !empty($value);
/* *
* 主に SELECT、SHOW およびその他の命令のためのクエリの実行
* @access 関数
* @param string $sql SQL コマンド
* @returnmixed
*/
static function query($sql='') {
// 获取数据库联接
$link = self::$link
if ( !$link ) return; false;
self::$queryStr = $sql;
//释放次回の查询結果
if ( !empty(self::$PDOStatement) ) self::free(); self::$PDOStatement = $link->prepare(self::$queryStr);
$bol = self::$PDOStatement->execute();
// 有错误则抛出异常
self::haveErrorThrowException();
return $bol;
/**
* データベース操作メソッド
* @access 関数
* @param string $sql 実行文
* @param boolean $lock ロックするかどうか(デフォルトはロックなし)
* @return void
public functionexecute($sql='',$lock=false) {
if(empty($sql)) $sql = $this->queryStr;
return $this->_execute ($ SQL);*/
/**
* INSERT、UPDATE、DELETE の実行文
* @access 関数
* @param string $sql SQL コマンド
* @return integer
*/
static 関数の実行($ sql='') {
// 获取数据库联接
$link = self::$link;
if ( !$link ) return false;
self::$queryStr = $sql;
//释放次回的查询結果
if ( !empty(self::$PDOStatement) ) self::free();
$result = $link->exec(self::$queryStr);
// 有错误则抛出异常
self::haveErrorThrowException();
if ( false === $result) {
return false;
} else {
self::$numRows = $result;
self::$lastInsertId = $link->lastInsertId();
self::$numRows を返します;
}
}
/**
* データベース変更操作かどうか
* @access private
* @param string $query SQL コマンド
* @return boolen クエリ操作の場合は false を返します
*/
static function isMainIps($query) {
$queryIps = 'INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|LOAD DATA|SELECT .* INTO|COPY |ALTER|GRANT|REVOKE|LOCK|UNLOCK';
if (preg_match('/^s*"?(' . $queryIps . ')s /i', $query)) {
return true;
}
return false;
}
/**
* POST 送信データをフィルターします
* @access private
* @parammixed $data POST 送信データ
* @param string $table データ テーブル名
* @returnmixed $newdata
*/
static function filterPost($table,$data) {
$table_column = self::getFields($table);
$newdata=array( );
foreach ($table_column as $key=>$val){
if(array_key_exists($key,$data) && ($data[$key])!==''){
$newdata[$key] = $data[$key];
}
}
return $newdata;
/**
* トランザクション開始
* @access function
* @return void
*/
startTrans() {
//データロールバックは
$link = self::$link;
if ( !$link ) return false;
if (self::$transTimes == 0) {
$link->beginTransaction();
}
return ;
/**
* 非自動送信ステータスでのクエリ送信に使用されます
* @access function
* @return boolen
*/
function commit() {
$link = self::$link;
if ( !$link ) return false;
if (self::$transTimes > 0) {
$result = $link->commit();
self::$transTimes = 0;
if(!$result){
throw_Exception(self::$error());
}
}
return true;
}
/**
* トランザクションのロールバック
* @access 関数
* @return boolen
*/
public function rollback() {
$link = self::$link;
if (!$link ) は false を返します。
if (self::$transTimes > 0) {
$result = $link->rollback();
self::$transTimes = 0;
if(!$result){
throw_Exception(self::$error());
false を返します。
}
}
true を返します。
}
}
?>


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール