>  기사  >  백엔드 개발  >  PHP PDO 데이터베이스 작업 캡슐화 클래스 코드

PHP PDO 데이터베이스 작업 캡슐화 클래스 코드

WBOY
WBOY원래의
2016-07-25 08:51:521015검색
  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 함수
  301. * @param
  302. * @return String 실행된 SQL
  303. */
  304. 정적 함수 getLastSql() {
  305. $link = self::$link;
  306. if ( !$link ) return false;
  307. return self::$queryStr;
  308. }
  309. /* *
  310. * 마지막으로 삽입된 ID 가져오기
  311. * @access 함수
  312. * @param
  313. * @return 정수 마지막으로 삽입된 데이터 ID
  314. */
  315. 정적 함수 getLastInsId(){
  316. $link = self::$link;
  317. if ( !$link ) return false;
  318. return self::$lastInsertId;
  319. }
  320. /**
  321. * DB 버전 가져오기
  322. * @access 함수
  323. * @param
  324. * @return 문자열
  325. */
  326. 정적 함수 getDbVersion(){
  327. $link = self::$link;
  328. if ( !$link ) return false;
  329. return self::$dbVersion;
  330. }
  331. /**
  332. * 데이터베이스 테이블 정보 가져오기
  333. * @access 함수
  334. * @return 배열
  335. */
  336. 정적 함수 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 함수
  349. * @return 배열
  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_MAXIMUM_LENGTH), (NUMERIC_PRECISION NUMERIC_SCALE ), CHARACTER_MAXIMUM_LENGTH ) AS MAXCHAR,
  357. IS_NULLABLE, COLUMN_DEFAULT, COLUMN_KEY, EXTRA, COLUMN_COMMENT
  358. FROM
  359. INFORMATION_SCHEMA.COLUMNS
  360. WHERE
  361. TABLE_NAME = :tabName AND TABLE_SCHEMA='".DB_NAME."'";
  362. self::$queryStr = sprintf($sql, $tableName);
  363. $sth = $link->prepare($sql);
  364. $sth->bindParam(':tabName', $ tableName);
  365. $sth->execute();
  366. $result = $sth->fetchAll(constant('PDO::FETCH_ASSOC'));
  367. $info = array();
  368. foreach($result as $key => $val) {
  369. $info[$val['COLUMN_NAME']] = array(
  370. '위치' => $val['ORDINAL_POSITION'],
  371. '이름' => $val[ 'COLUMN_NAME'],
  372. '유형' => $val['COLUMN_TYPE'],
  373. 'd_type' => $val['DATA_TYPE'],
  374. '길이' => ['MAXCHAR'],
  375. 'notnull' => (strtolower($val['IS_NULLABLE']) == "아니요"),
  376. 'default' => $val['COLUMN_DEFAULT'],
  377. '기본' => (strtolower($val['COLUMN_KEY']) == '기본'),
  378. 'autoInc' => (strtolower($val['EXTRA']) == ' auto_increment'),
  379. 'comment' => $val['COLUMN_COMMENT']
  380. );
  381. }
  382. // 有错误则抛take异常
  383. self::haveErrorThrowException();
  384. $info 반환;
  385. }
  386. /**
  387. * 데이터베이스 닫기
  388. * @access 함수
  389. */
  390. 정적 함수 close() {
  391. self::$link = null;
  392. }
  393. / **
  394. * SQL 명령 보안 필터링
  395. * @access 함수
  396. * @param string $str SQL 명령
  397. * @return string
  398. */
  399. 정적 함수 escape_string($str) {
  400. return addedlashes($str);
  401. }
  402. /************************/
  403. /* 内part操작 방법 */
  404. /************************/
  405. /**
  406. * 오류가 발생하고 예외가 발생합니다
  407. * @access 함수
  408. * @return
  409. */
  410. static function haveErrorThrowException() {
  411. $obj =empty(self::$PDOStatement) ? self::$link : self::$PDOStatement;
  412. $arrError = $obj->errorInfo();
  413. if($arrError[0] !== '00000') { // 有错误信息
  414. self::$error = $arrError[0]."|".$arrError[2]. "
    [ SQL ] : ".self::$queryStr."
    ";
  415. self::throw_Exception(self::$error);
  416. false를 반환;
  417. }
  418. //主要针对execute()방법법抛出异常
  419. if(self::$queryStr=='')self::throw_Exception('쿼리가 비어 있었습니다

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

  713. /**

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

复代码


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.