백엔드 개발 PHP 튜토리얼 PHP PDO 데이터베이스 작업 캡슐화 클래스 코드

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

Jul 25, 2016 am 08:51 AM

  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으로 문의하세요.

핫 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> ​​'Hello World', 'github.com'=> ​​[ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP 로깅 : PHP 로그 분석을위한 모범 사례 PHP 로깅 : PHP 로그 분석을위한 모범 사례 Mar 10, 2025 pm 02:32 PM

PHP 로깅은 웹 애플리케이션을 모니터링하고 디버깅하고 중요한 이벤트, 오류 및 런타임 동작을 캡처하는 데 필수적입니다. 시스템 성능에 대한 귀중한 통찰력을 제공하고 문제를 식별하며 더 빠른 문제 해결을 지원합니다.

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

PHP에서 늦은 정적 결합의 개념을 설명하십시오. PHP에서 늦은 정적 결합의 개념을 설명하십시오. Mar 21, 2025 pm 01:33 PM

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. 프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. Mar 28, 2025 pm 05:12 PM

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

See all articles