首頁  >  文章  >  後端開發  >  php pdo資料庫操作封裝類別程式碼

php pdo資料庫操作封裝類別程式碼

WBOY
WBOY原創
2016-07-25 08:51:521078瀏覽
  1. /**

  2. * 데이터베이스 PDO 운영
  3. */
  4. class MysqlPdo {
  5. public static $PDOStatement = null;
  6. /**
  7. * 데이터베이스 연결 매개변수 구성
  8. * @var array
  9. * @access public
  10. */
  11. public static $config = array();
  12. /**
  13. * 영구 연결 사용 여부
  14. * @var bool
  15. * @access public
  16. */
  17. public static $pconnect = false;
  18. /**
  19. * 오류 메시지
  20. * @var string
  21. * @access public
  22. */
  23. public static $error = '';
  24. /**
  25. * 싱글톤 모드, Pdo 클래스의 유일한 인스턴스와 데이터베이스의 연결 리소스를 저장합니다.
  26. * @var object
  27. * @access public
  28. */
  29. protected static $link;
  30. /**
  31. * 데이터베이스 연결 여부
  32. * @var bool
  33. * @access public
  34. */
  35. public static $connected = false;
  36. /**
  37. * 데이터베이스 버전
  38. * @var string
  39. * @access public
  40. */
  41. public static $dbVersion = null;
  42. /**
  43. * 현재 SQL 문
  44. * @var string
  45. * @access public
  46. */
  47. public static $queryStr = ' ';
  48. /**
  49. * 마지막으로 삽입된 레코드의 ID
  50. * @var 정수
  51. * @access public
  52. */
  53. public static $lastInsertId = null;
  54. /**
  55. * 영향을 받은 레코드 수를 반환합니다.
  56. * @var 정수
  57. * @access public
  58. */
  59. public static $numRows = 0;
  60. // 트랜잭션 명령어 수
  61. public static $transTimes = 0;
  62. /**
  63. * 생성자,
  64. * @param $dbconfig 데이터베이스 연결 관련 정보, array('ServerName', 'UserName', 'Password', 'DefaultDb', 'DB_Port', 'DB_TYPE')
  65. */
  66. 공용 함수 __construct($dbConfig=''){
  67. if (!class_exists('PDO') ) self::throw_Exception("지원되지 않음: PDO");
  68. //매개변수가 전송되지 않으면 기본 데이터 정의가 사용됩니다
  69. if (!is_array($dbConfig)) {
  70. $dbConfig = 배열(
  71. '호스트 이름' => DB_HOST,
  72. '사용자 이름' => DB_USER,
  73. '비밀번호' => DB_PWD,
  74. '데이터베이스' => DB_NAME,
  75. '호스트 포트' => ; DB_PORT,
  76. 'dbms' => DB_TYPE,
  77. 'dsn' => DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME
  78. );
  79. }
  80. if(empty($dbConfig['hostname'])) self::throw_Exception("데이터베이스 구성이 정의되지 않음");
  81. self::$config = $dbConfig;
  82. if(empty( self:: $config['params'])) self::$config['params'] = array();
  83. /**************************************멋진 분배기************ *******************************/
  84. if (!isset(self::$ link) ) {
  85. $configs = self::$config;
  86. if(self::$pconnect) {
  87. $configs['params'][constant('PDO::ATTR_PERSISTENT')] = true;
  88. }
  89. {
  90. self::$link = new PDO( $configs['dsn'], $configs['username'], $configs['password'],$configs[ 'params' 시도 ]);
  91. } catch (PDOException $e) {
  92. self::throw_Exception($e->getMessage());
  93. }
  94. if(!self::$link ) {
  95. self::throw_Exception('PDO 연결 오류');
  96. false 반환;
  97. }
  98. self::$link->exec('SET NAMES '.DB_CHARSET);
  99. self: :$dbVersion = self::$link->getAttribute(constant("PDO::ATTR_SERVER_INFO"));
  100. // 연결을 성공적으로 표시
  101. self::$connected = true;
  102. // 데이터베이스 연결 구성 정보 등록 취소
  103. unset($configs);
  104. }
  105. return self::$link;
  106. }
  107. /**
  108. * 쿼리 결과 해제
  109. * @access 함수
  110. */
  111. 정적 함수 무료 () {
  112. self::$PDOStatement = null;
  113. }
  114. /************************/
  115. /* 데이터베이스 작업*/
  116. /************************/
  117. /**
  118. * 모든 쿼리 데이터 가져오기
  119. * @access 함수
  120. * @return 배열
  121. */
  122. 정적 함수 getAll($sql=null) {
  123. if($sql != null)
  124. {
  125. self::query($sql) ;
  126. }
  127. //데이터 세트 반환
  128. $result = self::$PDOStatement->fetchAll(constant('PDO::FETCH_ASSOC'));
  129. return $result;
  130. }
  131. /**
  132. * 쿼리 결과 가져오기
  133. * @access 함수
  134. * @param string $sql SQL 명령
  135. * @param 정수 $seek 포인터 위치
  136. * @return 배열
  137. */
  138. 정적 함수 getRow($sql=null) {
  139. if($sql != null)
  140. {
  141. self::query($sql ) ;
  142. }
  143. // 배열 세트 반환
  144. $result = self::$PDOStatement->fetch(constant('PDO::FETCH_ASSOC'),constant('PDO::FETCH_ORI_NEXT')) ;
  145. return $result;
  146. }
  147. /**
  148. * SQL 문을 실행하여 쿼리 또는 작업 수행을 자동으로 판단
  149. * @access 함수
  150. * @param string $sql SQL 명령
  151. * @return 혼합
  152. */
  153. 정적 함수 doSql($sql='') {
  154. if(self::isMainIps($sql) ) {
  155. return self::execute($sql);
  156. }else {
  157. return self::getAll($sql);
  158. }
  159. }
  160. /**
  161. * 지정된 ID를 기준으로 테이블의 레코드 검색(단일 테이블 작업에만 해당)
  162. * @access 함수
  163. * @param 정수 $priId 기본 키 ID
  164. * @param string $tables 데이터 테이블 이름
  165. * @param string $fields 필드 이름
  166. * @return ArrayObject 테이블 레코드
  167. */
  168. 정적 함수 findById($tabName,$priId,$fields='*'){
  169. $sql = 'SELECT %s FROM %s WHERE id=%d';
  170. self 반환: : getRow(sprintf($sql, self::parseFields($fields), $tabName, $priId));
  171. }
  172. /**
  173. * 尋找記錄
  174. * @access function
  175. * @param string $tables 資料表名
  176. * @param mixed $where 查詢條件
  177. * @param string $fields 欄位名稱
  178. * @param string $order 排序
  179. * @param string $limit 取多少條資料
  180. * @param string $group 分組
  181. * @param string $having
  182. * @param boolean $lock 是否加鎖
  183. * @return ArrayObject
  184. */
  185. 靜態函數 find($tables,$where="",$fields='*',$order=null,$limit=null,$group=null,$ having=null) {
  186. $sql = 'SELECT '.self::parseFields($fields)
  187. .' FROM '.$tables
  188. .self::parseWhere($where)
  189. .self::parseGroup($group)
  190. .self::parseHaving($having)
  191. .self::parseOrder( $order)
  192. .self::parseLimit($limit);
  193. $dataAll = self::getAll($sql);
  194. if(count($dataAll)==1){$rlt=$ dataAll[0];}else{$rlt=$dataAll;}
  195. return $rlt;
  196. }
  197. /**
  198. * 插入(單一)記錄
  199. * @access function
  200. * @param mixed $data 資料
  201. * @param string $table 資料表名
  202. * @return false | integer
  203. */
  204. function add($data,$table) {
  205. //過濾提交資料
  206. $data=self::filterPost($table,$data);
  207. foreach ($data as $key=>$val){
  208. if(is_array( $ val) && strtolower($val[0]) == 'exp') {
  209. $val = $val[1]; // 使用表達式 ???
  210. }elseif (is_scalar($val)){
  211. $val = self::fieldFormat($val);
  212. }else{
  213. //刪除複合物件
  214. 繼續;
  215. }
  216. $data[$key] = $val;
  217. }
  218. $fields = array_keys($data);
  219. array_walk($fields, array($this, 'addSpecialChar'));
  220. $fieldsStr = implode(',', $fields);
  221. $values = array_values($data);
  222. $valuesStr = implode(',', $values);
  223. $sql = '插入'.$table.' ('.$fieldsStr.') VALUES ('.$valuesStr.')';
  224. return self::execute($sql);
  225. }
  226. /**
  227. * 更新記錄
  228. * @access function
  229. * @param mixed $sets 資料
  230. * @param string $table 資料表名
  231. * @param string $where 更新條件
  232. * @param string $limit
  233. * @param string $order
  234. * @return false | integer
  235. */
  236. 靜態函數update($sets,$table,$where,$limit=0,$order='') {
  237. $sets = self::filterPost($table,$sets);
  238. $sql = '更新「.$表」。 self::execute($sql );
  239. }
  240. /**
  241. * 儲存某個欄位的值
  242. * @access function
  243. * @param string $field 要儲存的欄位名稱
  244. * @param string $value 欄位值
  245. * @param string $ table 資料表
  246. * @param string $where 儲存條件
  247. * @param boolean $asString 欄位值是否為字串
  248. * @return void
  249. */
  250. 靜態函式setField($field, $value, $table, $condition="", $asString=false ) {
  251. //如果有'(' 視為SQL 指令更新否則更新欄位內容為純字串
  252. if(false === strpos($value,'(') || $asString) $value = '"'.$value .'"';
  253. $sql = '更新'.$table.' SET '.$field.'='.$value.self::parseWhere($condition);
  254. 回傳self::execute( $sql);
  255. }
  256. /**
  257. * 刪除記錄
  258. * @access function
  259. * @param mixed $where 為條件Map、Array或String
  260. * @param string $table 資料表名
  261. * @param string $limit
  262. * @param string $order
  263. * @return false | integer
  264. */靜態函式($where,$table,$limit='',$order='' ) {
  265. $sql = 'DELETE FROM '.$table.self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
  266. 回傳self::執行($sql);
  267. }
  268. /**
  269. ----------------------------------------------- -----------
  270. * 修改或儲存資料(僅用於單表操作)
  271. * 有主鍵ID則為修改,無主鍵ID則為增加
  272. * 修改記錄:
  273. ---------------------------------------------- ------------
  274. * @access function
  275. ---------------------------- ------------------------------
  276. * @param $tabName 表名
  277. * @param $aPost 提交表單的$_POST
  278. * @param $priId 主鍵ID
  279. * @param $aNot 要排除的一個字段或數組
  280. * @param $aCustom 自訂的數組,附加到資料庫中保存
  281. * @param $isExits 是否已經存在存在:true, 不存在:false
  282. ------------------------------- ---------------------------
  283. * @return Boolean 修改或儲存是否成功
  284. -------- --------------------------------------------------
  285. */
  286. 函數saveOrUpdate($tabName, $aPost, $priId="", $aNot="", $aCustom="" , $isExits=false) {
  287. if(empty($tabName) || !is_array($aPost) || is_int($aNot)) return false;
  288. if(is_string($aNot) && !empty($aNot)) $aNot = array($aNot);
  289. if(is_array($aNot) && is_int(key ) ($aNot))) $aPost = array_diff_key($aPost, array_flip($aNot));
  290. if(is_array($aCustom) ) && is_string(key($aCustom))) $aPost = array_merge($aCustom))) $aPost = array_merge($aCustom))) $aPost = aPostge($aPost , $aCustom);
  291. if (empty($priId) && !$isExits) { // 新增
  292. $aPost = array_filter ($aPost, array($this, 'removeEmpty'));
  293. return self::add($aPost, $tabName);
  294. }else { //修改
  295. return self::update($aPost, $tabName, "id=".$priId);
  296. }
  297. }
  298. /**
  299. * 取得最近一次查詢的sql語句
  300. * @access function
  301. * @param
  302. * @return String 執行的SQL
  303. */
  304. 靜態函數getLastSql() {
  305. $link = self::$link;
  306. if (!$link ) return false;
  307. 回傳self::$queryStr;
  308. }
  309. /* *
  310. * 取得最後插入的ID
  311. * @access function
  312. * @param
  313. * @return integer 最後插入時的資料ID
  314. */
  315. 靜態函式getLastInsId(){
  316. $link = self::$link;
  317. if ( !$link ) return false;
  318. 回傳self::$lastInsertId;
  319. }
  320. /**
  321. * 取得DB版本
  322. * @access function
  323. * @param
  324. * @return string
  325. */
  326. 靜態函數getDbVersion(){
  327. $link = self::$link;
  328. if ( !$link ) return false;
  329. return self::$dbVersion;
  330. }
  331. /**
  332. * 取得資料庫的表格資訊
  333. * @access function
  334. * @return array
  335. */
  336. static function getTables() {
  337. $info = array();
  338. if(self::query ("顯示表格")) {
  339. $result = self::getAll();
  340. foreach ($result as $key => $val) {
  341. $info[$key] = current( $ val);
  342. }
  343. }
  344. return $info;
  345. }
  346. /**
  347. * 取得資料表的欄位資訊
  348. * @access function
  349. * @return array
  350. */
  351. 靜態函數getFields($tableName) {
  352. //取得資料庫連線
  353. $link = self::$link;
  354. $sql = "SELECT
  355. ORDINAL_POSITION ,COLUMN_NAME, COLUMN_TYPE, DATA_TYPE,
  356. IF(ISNULL(CHARACTER_MAX ) AS MAXCHAR,
  357. IS_NULLABLE, COLUMN_DEFAULT, COLUMN_KEY, EXTRA, COLUMN_COMMENT
  358. FROM
  359. INFORMATION_SCH! 🎜 >self::$queryStr = sprintf($sql, $tableName);
  360. $sth = $link->prepare($sql);
  361. $sth->bindParam(':tabName', $ tableName);
  362. $sth->execute();
  363. $result = $sth->fetchAll(constant('PDO::FETCH_ASSOC'));
  364. $info = array();
  365. foreach ($ result as $key =>; $val) {
  366. $info[$val['COLUMN_NAME']] = array(
  367. 'postion' => $val['ORDINAL_POSITION'],
  368. 'name' => $val[ 'COLUMN_NAME'],
  369. 'type' => $val['COLUMN_TYPE'],
  370. 'd_type' => $val['DATA_TYPE'],
  371. 'length' => $val ['MAXCHAR'],
  372. 'notnull' => (strtolower($val['IS_NULLABLE']) == "否"),
  373. 'default' => $val['COLUMN_DEFAULT'],
  374. 'primary' => (strtolower($val['COLUMN_KEY']) == 'pri'),
  375. 'autoInc' => (strtolower($val['EXTRA']) == ' auto_increment' ),
  376. 'comment' => $val['COLUMN_COMMENT']
  377. );
  378. }
  379. //有錯誤則發送異常
  380. self::haveErrorThrowException(); return $info;
  381. }
  382. /**
  383. * 關閉資料庫
  384. * @access function
  385. */
  386. 靜態函式close() {
  387. self::$link = null;
  388. }
  389. / **
  390. * SQL指令安全過濾
  391. * @access function
  392. * @param string $str SQL指令
  393. * @return string
  394. */
  395. static function escape_string($str) {
  396. return addslashes($str);
  397. }
  398. /*************************/
  399. /* 內部操作方法*/
  400. /*************************/
  401. /**
  402. * 有錯誤拋出例外
  403. * @access function
  404. * @return
  405. */
  406. 靜態函式haveErrorThrowException() {
  407. $obj = 空(self::$PDOStatement) ? self::$link : self::$PDOStatement;
  408. $arrError = $obj->errorInfo();
  409. if($arrError[0] !== '00000') { // 有錯誤訊息
  410. self::$error = $arrError[0]."|".$arrError[2]. "
    [ SQL ] : ".self::$queryStr."
    ";
  411. self::throw_exception(self::$error);
  412. 回傳false;
  413. }
  414. //主要針對execute()方法發送例外狀況
  415. if(self::$queryStr=='' )self::throw_exception('查詢為空

    [ SQL 語句] :');
  416. }
  417. /**
  418. * where分析
  419. * @access function
  420. * @param mixed $where 查詢條件
  421. * @return string
  422. */
  423. 靜態函式parseWhere($where ) {
  424. $whereStr = '';
  425. if( is_string($where) || is_null($where)) {
  426. $whereStr = $where;
  427. }
  428. 回傳空($ whereStr)?'':' WHERE '.$whereStr;
  429. }
  430. /**
  431. * 訂單分析
  432. * @access 函數
  433. * @param mix $order 排除訂單
  434. * @return string
  435. */
  436. 靜態函數parseOrder($order) {
  437. $orderStr = '';
  438. if(is_array($order))
  439. $orderStr .= ' ORDER BY '.implode(',', $order);
  440. else if(is_string($order) && !empty($order))
  441. $orderStr .= ' ORDER BY '.$order;
  442. return $orderStr;
  443. }
  444. /**
  445. * 限制分析
  446. * @access 函數
  447. * @param string $limit
  448. * @return string
  449. */
  450. 靜態函數parseLimit($limit) {
  451. */
  452. 靜態函數parseLimit($limit) {
  453. $limitStr = '';
  454. if(is_array($limit) )) {
  455. if(count($limit)>1)
  456. $limitStr .= ' LIMIT '.$limit[0]. ' , '.$limit[1].' ';
  457. else
  458. $limitStr .= ' LIMIT '.$limit[0].' ';
  459. } else if(is_string($limit) && !empty($limit)) {
  460. $limitStr .= ' LIMIT '.$limit.' ';
  461. }
  462. 回傳$limitStr;
  463. }
  464. /**
  465. * 그룹 분할
  466. * @access 함수
  467. * @param 혼합 $group
  468. * @return 문자열
  469. */
  470. 정적 함수 parseGroup($group) {
  471. $groupStr = '';
  472. if(is_array($group))
  473. $groupStr .= ' GROUP BY '.implode(',', $group);
  474. else if(is_string($group) && !empty($group))
  475. $groupStr .= ' GROUP BY '.$group;
  476. empty($groupStr)?'':$groupStr;
  477. }
  478. /**
  479. * have分析
  480. * @access 함수
  481. * @param string $having
  482. * @return string
  483. */
  484. 정적 함수parseHaving($having) {
  485. $havingStr = '';
  486. if(is_string($having) && !empty($having))
  487. $havingStr .= ' HAVING '.$having;
  488. return $havingStr;
  489. }
  490. /**
  491. * 필드 분할
  492. * @access 함수
  493. * @param 혼합 $필드
  494. * @return 문자열
  495. */
  496. function parseFields($fields) {
  497. if(is_array($fields)) {
  498. array_walk($fields, array($this, 'addSpecialChar'));
  499. $fieldsStr = implode(',', $fields);
  500. }else if(is_string($fields) && !empty($fields)) {
  501. if( false === strpos($fields,'`') ) {
  502. $fields =explode(',',$fields);
  503. array_walk($fields, array($this, 'addSpecialChar'));
  504. $fieldsStr = implode(',', $fields );
  505. }else {
  506. $fieldsStr = $fields;
  507. }
  508. }else $fieldsStr = '*';
  509. return $fieldsStr;
  510. }
  511. /**
  512. * 데이터 업데이트 시 호출되는 분석 설정
  513. * @access 함수
  514. * @param 혼합 $값 ​​
  515. * @return 문자열
  516. */
  517. 비공개 함수 parseSets($sets) {
  518. $setsStr = '';
  519. if(is_array($sets)){
  520. foreach ($sets as $key=> $val){
  521. $key = self::addSpecialChar($key);
  522. $val = self::fieldFormat($val);
  523. $setsStr .= "$key = ".$val. ",";
  524. }
  525. $setsStr = substr($setsStr,0,-1);
  526. }else if(is_string($sets)) {
  527. $setsStr = $sets;
  528. }
  529. return $setsStr;
  530. }
  531. /**
  532. * 필드 서식 지정
  533. * @access 함수
  534. * @param 혼합 $value
  535. * @return 혼합
  536. */
  537. 정적 함수 fieldFormat(&$value) {
  538. if(is_int($value)) {
  539. $value = intval($value);
  540. } else if(is_float($value)) {
  541. $value = floatval($value);
  542. } elseif(preg_match('/^(w* ( |-|*|/)?w*)$/i',$value)){
  543. // 支持在字段的值里face直接使用其它字段
  544. // 例如 (점수 1) (이름)必须包含括号
  545. $value = $value;
  546. }else if(is_string($value)) {
  547. $value = '''.self::escape_string($value).''';
  548. }
  549. return $value;
  550. }
  551. /**
  552. *
  553. 에 따라 필드 및 테이블 이름에 ` 추가* 지침에 사용된 키워드가 mysql에 대해 올바른지 확인
  554. * @access 함수
  555. * @param 혼합 $값
  556. * @return 혼합
  557. */
  558. 정적 함수 addSpecialChar(&$value) {
  559. if( '*' == $value | | false !== strpos($value,'(') || false !== strpos($value,'.') || false !== strpos($value,'`')) {
  560. //如果包含* 或者 使用了sql方法 则不작处理
  561. } elseif(false === strpos($value,'`') ) {
  562. $value = '`'.trim($value).'` ';
  563. }
  564. return $value;
  565. }
  566. /**
  567. ---------------------------------- ----------
  568. * 빈 요소 제거
  569. ------------- ---- ------------
  570. * @access 함수
  571. ---------- ----- ----------------
  572. * @param 혼합 $ 값
  573. ---------------------------- ----- -------------
  574. * @return 혼합
  575. ---------- ---- -----------------
  576. */
  577. 정적 함수 RemoveEmpty($value){
  578. return !empty($value);
  579. }
  580. /**
  581. * 주로 SELECT, SHOW 및 기타 명령에 대한 쿼리 실행
  582. * @access 함수
  583. * @param string $sql sql 명령
  584. * @return 혼합
  585. */
  586. 정적 함수 쿼리($sql='') {
  587. // 获取数据库联接
  588. $link = self::$link;
  589. if ( !$link ) return false;
  590. self::$queryStr = $sql;
  591. //释放前次的查询结果
  592. if ( !empty(self::$PDOStatement) ) self ::free();
  593. self::$PDOStatement = $link->prepare(self::$queryStr);
  594. $bol = self::$PDOStatement->execute();
  595. // 有错误则抛 Out异常
  596. self::haveErrorThrowException();
  597. return $bol;
  598. }
  599. /**
  600. * 데이터베이스 연산 방식
  601. * @access 함수
  602. * @param string $sql 실행문
  603. * @param boolean $lock 잠금 여부(기본값은 잠겨 있지 않음)
  604. * @return void
  605. 공용 함수 실행($sql='',$lock=false) {
  606. if(empty($sql)) $sql = $this->queryStr
  607. return $this->_execute; ($SQL)
  608. }*/
  609. /**
  610. * INSERT, UPDATE, DELETE 실행문
  611. * @access 함수
  612. * @param string $sql sql 명령
  613. * @return 정수
  614. * /
  615. 정적 함수 실행($sql='') {
  616. // 获取数据库联接
  617. $link = self::$link;
  618. if ( !$link ) return false;
  619. self::$queryStr = $sql;
  620. //释放前次的查询结果
  621. if ( !empty(self::$PDOStatement) ) self::free();
  622. $result = $link ->exec(self::$queryStr);
  623. // 있음 false;
  624. } else {
  625. self::$numRows = $result;
  626. self::$lastInsertId = $link->lastInsertId();
  627. return self::$numRows;
  628. }
  629. }
  630. /**
  631. * 데이터베이스 변경 작업인지 여부
  632. * @access private
  633. * @param string $query SQL 명령
  634. * @return boolen 쿼리 작업인 경우 false 반환
  635. */
  636. 정적 함수 isMainIps($query) {
  637. $queryIps = 'INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|LOAD DATA|SELECT .* INTO|COPY |ALTER|GRANT|REVOKE|LOCK|UNLOCK';
  638. if (preg_match('/^s*"?(' . $queryIps . ')s /i', $query)) {
  639. true를 반환합니다.
  640. }
  641. false 반환;
  642. }
  643. /**
  644. * POST 제출 데이터 필터링
  645. * @access private
  646. * @param 혼합 $data POST 제출 데이터
  647. * @param string $table 데이터 테이블 이름
  648. * @return 혼합 $newdata
  649. */
  650. 정적 함수 filterPost($table,$data) {
  651. $table_column = self::getFields( $table);
  652. $newdata=array();
  653. foreach($table_column as $key=>$val){
  654. if(array_key_exists($key,$data) && ($data[$ 키])!==''){
  655. $newdata[$key] = $data[$key];
  656. }
  657. }
  658. return $newdata;
  659. }
  660. / **
  661. * 거래 시작
  662. * @access 함수
  663. * @return void
  664. */
  665. 정적 함수 startTrans() {
  666. //数据rollback 支持
  667. $link = self::$link;
  668. if ( !$link ) return false;
  669. if (self::$transTimes == 0) {
  670. $link->beginTransaction();
  671. }
  672. self::$transTimes ;
  673. return ;
  674. }
  675. /**
  676. * 비자동 제출 상태에서 쿼리 제출에 사용됩니다.
  677. * @access 함수
  678. * @return boolen
  679. */
  680. 정적 함수 커밋() {
  681. $link = self::$link;
  682. if ( !$link ) return false;
  683. if (self::$ transTimes > 0) {
  684. $result = $link->commit();
  685. self::$transTimes = 0;
  686. if(!$result){
  687. self::throw_Exception( self::$error());
  688. false 반환;
  689. }
  690. }
  691. true 반환;
  692. }
  693. /**
  694. * 트랜잭션 롤백
  695. * @access 함수
  696. * @return bolen
  697. */
  698. 공개 함수 롤백 () {
  699. $link = self::$link;
  700. if ( !$link ) return false;
  701. if (self::$transTimes > 0) {
  702. $result = $link->rollback();
  703. self::$transTimes = 0;
  704. if(!$result){
  705. self::throw_Exception(self:: $error());
  706. false 반환;
  707. }
  708. }
  709. true 반환;
  710. }

  711. /**

  712. * 오류 처리
  713. * @access 함수
  714. * @return void
  715. */
  716. 정적 함수 throw_Exception($err){
  717. echo '
    오류:'.$err.'
    ';
  718. }
  719. }

复代码


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn