php pdoデータベース操作のカプセル化クラスコード

WBOY
リリース: 2016-07-25 08:51:52
オリジナル
1009 人が閲覧しました
  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 integer
  51. * @access public
  52. */
  53. public static $lastInsertId = null;
  54. /**
  55. * 影響を受けるレコードの数を返します
  56. * @var integer
  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. public function __construct($dbConfig=''){
  67. if (!class_exists('PDO')) self::throw_Exception("サポートされていません: PDO");
  68. //パラメータが送信されない場合、デフォルトのデータ定義が使用されます
  69. if (!is_array($dbConfig)) {
  70. $dbConfig = array(
  71. 'hostname' => DB_HOST,
  72. 'username' => DB_USER,
  73. 'パスワード' =>
  74. 'データベース' => DB_PORT,
  75. 'dbms' => . DB_HOST.";dbname=".DB_NAME
  76. );
  77. }
  78. if(empty($dbConfig['hostname'])) self::throw_Exception("データベース構成が定義されていません");
  79. self::$config = $ dbConfig ;
  80. if(empty(self::$config['params'])) self::$config['params'] = array();
  81. /***************************************ゴージャスな仕切り************ *****************************/
  82. if (!isset(self) : :$link) ) {
  83. $configs = self::$config;
  84. if(self::$pconnect) {
  85. $configs['params'][constant('PDO::ATTR_PERSISTENT')] = true;
  86. try {
  87. self::$link = new PDO( $configs['dsn'], $configs['username'], $configs['password'],$configs['params']);
  88. } catch ( PDOException $e) {
  89. self::throw_Exception($e->getMessage());
  90. }
  91. if(!self::$link) {
  92. self::throw_Exception('PDO CONNECT ERROR');
  93. return false ;
  94. }
  95. self::$link->exec('SET NAMES '.DB_CHARSET);
  96. self::$dbVersion = self::$link->getAttribute(constant("PDO::ATTR_SERVER_INFO")) ;
  97. // 接続に成功をマークします
  98. self::$connected = true;
  99. // データベース接続構成情報をログアウトします
  100. unset($configs);
  101. }
  102. return self::$link;
  103. }
  104. /**
  105. * クエリ結果を公開
  106. * @access関数
  107. * /
  108. static function free() {
  109. self::$PDOStatement = null;
  110. }
  111. /************************/
  112. /* データベース操作*/
  113. /************************/
  114. / **
  115. * すべてのクエリデータを取得します
  116. * @access 関数
  117. * @return 配列
  118. */
  119. static function getAll($sql=null) {
  120. if($sql != null)
  121. {
  122. self::query($sql);
  123. }
  124. //データセットを返す
  125. $ result = self:: $PDOStatement->fetchAll(constant('PDO::FETCH_ASSOC'));
  126. return $result;
  127. }
  128. /**
  129. * クエリ結果の取得
  130. * @access 関数
  131. * @param string $sql SQL コマンド
  132. * @param integer $seek ポインタ位置
  133. * @return array
  134. */
  135. static function getRow($sql=null) {
  136. if($sql != null)
  137. {
  138. self::query($sql);
  139. }
  140. // 配列セットを返す
  141. $result = self::$PDOStatement->fetch(constant('PDO::FETCH_ASSOC) '),constant( 'PDO::FETCH_ORI_NEXT'));
  142. return $result;
  143. }
  144. /**
  145. * SQL ステートメントを実行し、クエリまたは操作を自動的に判断します
  146. * @access 関数
  147. * @param string $sql SQL コマンド
  148. * @return 混合
  149. */
  150. 静的関数 doSql($sql='') {
  151. if(self::isMainIps( $sql)) {
  152. return self::execute($sql);
  153. }else {
  154. return self::getAll($sql);
  155. }
  156. }
  157. /**
  158. * 指定された ID に基づいてテーブル内のレコードを検索します (単一テーブル操作の場合のみ)
  159. * @access 関数
  160. * @param integer $priId 主キー ID
  161. * @param string $tables データテーブル名
  162. * @param string $フィールド フィールド名
  163. * @return ArrayObject テーブル レコード
  164. */
  165. static function findById($ tabName,$priId, $fields='*'){
  166. $sql = 'SELECT %s FROM %s WHERE id=%d';
  167. return self::getRow(sprintf($sql, self::parseFields($fields) )、$tabName、$priId));
  168. }
  169. /**
  170. * レコード検索
  171. * @access関数
  172. * @param string $tables データテーブル名
  173. * @parammixed $where クエリ条件
  174. * @param string $fields フィールド名
  175. * @param string $order Sort
  176. * @param string $limit 取得するデータの個数
  177. * @param string $group グループ化
  178. * @param string $having
  179. * @param boolean $lock ロックするか否か
  180. * @return ArrayObject
  181. */
  182. 静的関数 find($tables,$where="",$fields='*',$order=null,$limit=null,$group=null,$having=null) {
  183. $sql = 'SELECT '.self::parseFields($fields)
  184. .' FROM '.$tables
  185. .self::parseWhere($where)
  186. .self::parseGroup($group)
  187. .self::parseHaving($having)
  188. .self::parseOrder($order)
  189. .self:: parseLimit($limit);
  190. $dataAll = self::getAll($sql);
  191. if(count($dataAll)==1){$rlt=$dataAll[0];}else{$rlt=$dataAll; }
  192. return $rlt;
  193. }
  194. /**
  195. * (単一) レコードを挿入します
  196. * @access 関数
  197. * @param 混合 $data データ
  198. * @param string $table データ テーブル名
  199. * @return false |*/
  200. function add($data,$table) {
  201. //过滤提交数据
  202. $data=self::filterPost($table,$data);
  203. foreach ($data as $key=>$val){
  204. if(is_array($val) && strto lower($val[0]) == 'exp') {
  205. $val = $val[1]; // 表达式を使用します ???
  206. }elseif (is_scalar($val)){
  207. $val = self::fieldFormat($val);
  208. }else{
  209. // 去掉复合对象
  210. continue;
  211. }
  212. $data [$key] = $val;
  213. }
  214. $fields = array_keys($data);
  215. array_walk($fields, array($this, 'addSpecialChar'));
  216. $fieldsStr = implode(',', $fields);
  217. $values = array_values($data);
  218. $valuesStr = implode(',', $values);
  219. $sql = 'INSERT INTO '.$table.' ('.$fieldsStr.') VALUES ('.$valuesStr.')';
  220. return self::execute($sql);
  221. }
  222. /**
  223. * レコード更新
  224. * @access関数
  225. * @parammixed $sets data
  226. * @param string $table データテーブル名
  227. * @param string $where更新条件
  228. * @param string $limit
  229. * @param string $order
  230. * @return false
  231. */
  232. static function update($sets,$ table,$where,$limit=0,$order='') {
  233. $sets = self::filterPost($table,$sets);
  234. $sql = 'UPDATE '.$table.' SET '.self::parseSets($sets).self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
  235. return self::execute($sql);
  236. }
  237. /**
  238. * 特定のフィールドの値を保存します
  239. * @access関数
  240. * @param string $field 保存するフィールドの名前
  241. * @param string $value フィールドの値
  242. * @param string $table データテーブル
  243. * @ param string $where 保存条件
  244. * @param boolean $asString フィールド値が文字列かどうか
  245. * @return void
  246. */
  247. static function setField($field, $value, $table, $condition="", $asString=false) {
  248. // 如果有'(' 参照 SQL命令更新if(false === strpos($value,'(') || $asString) $value = '"'.$value.'"';
  249. $sql = 'UPDATE ' .$table.' SET '.$field.'='.$value.self::parseWhere($condition);
  250. return self::execute($sql);
  251. }
  252. /**
  253. * レコードを削除します
  254. * @access 関数
  255. * @parammixed $where は条件付きマップ、配列、または文字列です
  256. * @param string $table データテーブル名
  257. * @param string $limit
  258. * @param string $order
  259. * @ false を返します |*/
  260. 静的関数の削除($where,$table,$limit='',$order='') {
  261. $sql = 'DELETE FROM '.$table.self::parseWhere($where).self::parseOrder($ order).self::parseLimit($limit);
  262. return self::execute($sql);
  263. }
  264. /**
  265. +------------------------------------------------ ----------
  266. * データの変更または保存(単一テーブル操作のみ)
  267. * 主キーIDがある場合は変更、主キーIDがない場合は追加
  268. *修正記録:
  269. +---- -------------------------------------- --------- ----
  270. * @アクセス機能
  271. +---------------------------- --------- -------------------
  272. * @param $tabName テーブル名
  273. * @param $aPost $_POST でフォームを送信
  274. * @param $priId 主キー ID
  275. * @param $aNot 除外されるフィールドまたは配列
  276. * @param $aCustom データベースに追加され、保存されるカスタマイズされた配列
  277. * @param $isExits すでに存在するかどうか: true、存在しません: false
  278. +----- -------------------------------------- ------------ ---
  279. * @return Boolean 変更または保存が成功したかどうか
  280. +--------------------- ------------------------------------------
  281. */
  282. function saveOrUpdate($tabName, $aPost, $priId="", $aNot="", $aCustom="", $isExits=false) {
  283. if(empty($tabName) || !is_array($aPost) || is_int($aNot)) return false;
  284. if(is_string( $aNot) && !empty($aNot)) $aNot = array($aNot);
  285. if(is_array($aNot) && is_int(key($aNot))) $aPost = array_diff_key($aPost, array_flip($aNot) ));
  286. if(is_array($aCustom) && is_string(key($aCustom))) $aPost = array_merge($aPost,$aCustom);
  287. if (empty($priId) && !$isExits) { //新增
  288. $a​​Post = array_filter($aPost, array($this, 'removeEmpty'));
  289. return self::add($aPost, $tabName);
  290. }else { //修改
  291. return self::update($aPost, $tabName, "id=".$priId);
  292. }
  293. }
  294. /**
  295. * 最新のクエリの SQL ステートメントを取得します
  296. * @access function
  297. * @param
  298. * @return String 実行された SQL
  299. */
  300. static function getLastSql() {
  301. $link = self::$link;
  302. if ( !$link ) return false;
  303. return self::$queryStr;
  304. }
  305. /**
  306. * 最後に挿入された ID を取得します
  307. * @access function
  308. * @param
  309. * @return integer 最後に挿入されたデータ ID
  310. */
  311. static function getLastInsId(){
  312. $link = self:: $link;
  313. if ( !$link ) return false;
  314. return self::$lastInsertId;
  315. }
  316. /**
  317. * DB バージョンの取得
  318. * @access 関数
  319. * @param
  320. * @return string
  321. */
  322. static function getDbVersion(){
  323. $link = self::$link;
  324. if ( !$link ) return false;
  325. return self::$dbVersion;
  326. }
  327. /**
  328. * データベーステーブル情報を取得します
  329. * @access関数
  330. * @return array
  331. */
  332. static function getTables() {
  333. $info = array();
  334. if(self::query ("SHOW TABLES")) {
  335. $result = self::getAll();
  336. foreach ($result as $key => $val) {
  337. $info[$key] = current($val);
  338. }
  339. }
  340. return $info;
  341. }
  342. /**
  343. * データテーブルのフィールド情報を取得
  344. * @access関数
  345. * @return array
  346. */
  347. static function getFields($tableName) {
  348. // 获取数据库联接
  349. $link = self::$link;
  350. $sql = "SELECT
  351. ORDINAL_POSITION 、COLUMN_NAME、COLUMN_TYPE、DATA_TYPE、
  352. IF(ISNULL(CHARACTER_MAXIMUM_LENGTH)、(NUMERIC_PRECISION + NUMERIC_SCALE)、CHARACTER_MAXIMUM_LENGTH) AS MAXCHAR、
  353. IS_NULLABLE、COLUMN_DEFAULT、COLUMN_KEY、EXTRA、 _COMMENT
  354. FROM
  355. INFORMATION_SCHEMA.COLUMNS
  356. WHERE
  357. TABLE_NAME = :tabName AND TABLE_SCHEMA='".DB_NAME."'";
  358. self::$queryStr = sprintf($sql, $tableName);
  359. $sth = $link->prepare($sql);
  360. $sth->bindParam (':tabName', $tableName);
  361. $sth->execute();
  362. $result = $sth->fetchAll(constant('PDO::FETCH_ASSOC'));
  363. $info = array();
  364. foreach ($result as $key => $val) {
  365. $info[$val['COLUMN_NAME']] = array(
  366. 'postion' => $val['ORDINAL_POSITION'],
  367. 'name' => $val['COLUMN_NAME'],
  368. 'type' => $val['COLUMN_TYPE'],
  369. 'd_type' => $val['DATA_TYPE'],
  370. 'length' => $val['MAXCHAR'],
  371. 'notnull' => ; (strto lower($val['IS_NULLABLE']) == "いいえ"),
  372. 'default' => $val['COLUMN_DEFAULT'],
  373. 'primary' => ]) == 'pri'),
  374. 'autoInc' => (strto lower($val['EXTRA']) == 'auto_increment'),
  375. 'comment' => $val['COLUMN_COMMENT']
  376. ) ;
  377. }
  378. // 有错误则抛出异常
  379. self::haveErrorThrowException();
  380. return $info;
  381. }
  382. /**
  383. * データベースを閉じる
  384. * @access 関数
  385. */
  386. static function close() {
  387. self::$link = null;
  388. }
  389. /**
  390. * SQL コマンドのセキュリティ フィルタリング
  391. * @access 関数
  392. * @param string $str SQL コマンド
  393. * @return string
  394. */
  395. static functionscape_string($str) {
  396. returnaddslashes($str);
  397. }
  398. /************************/
  399. /* 内部操作方法 */
  400. /************************/
  401. /**
  402. * エラーがある場合は例外がスローされます
  403. * @access 関数
  404. * @return
  405. */
  406. 静的関数 haveErrorThrowException() {
  407. $obj = empty(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. return false;
  413. }
  414. //主要针对execute() メソッド抛出异常
  415. if(self::$queryStr=='')self::throw_Exception('クエリは空でした

    [ SQL语句 ] :');
  416. }
  417. /**
  418. * where 分析
  419. * @access 関数
  420. * @param 混合 $where クエリ条件
  421. * @return string
  422. */
  423. 静的関数 parseWhere($where) {
  424. $whereStr = '';
  425. if(is_string($where) || is_null($where)) {
  426. $whereStr = $where ;
  427. }
  428. return empty($whereStr)?'':' WHERE '.$whereStr;
  429. }
  430. /**
  431. * 順序分析
  432. * @access 関数
  433. * @param 混合 $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. $limitStr = '';
  452. if(is_array($limit)) {
  453. if(count($limit)>1)
  454. $limitStr .= ' LIMIT '.$limit[0].' 、「.$limit[1].」 ';
  455. else
  456. $limitStr .= ' LIMIT '.$limit[0].' ';
  457. } else if(is_string($limit) && !empty($limit)) {
  458. $limitStr .= ' LIMIT '.$limit.' ';
  459. }
  460. $limitStr;
  461. を返す
  462. /**
  463. * グループ分析
  464. * @access 関数
  465. * @parammixed $group
  466. * @return string
  467. */
  468. 静的関数 parseGroup($group) {
  469. $groupStr = '';
  470. if(is_array($group))
  471. $groupStr .= ' GROUP BY '.implode(',', $group);
  472. else if(is_string($group) && !empty($group))
  473. $groupStr .= ' GROUP BY '.$group;
  474. return empty($groupStr)?'':$groupStr;
  475. }
  476. /**
  477. * 分析を持っています
  478. * @access 関数
  479. * @param string $having
  480. * @return string
  481. */
  482. 静的関数 parseHaving($having) {
  483. $havingStr = '';
  484. if(is_string($having) && !empty($having))
  485. $havingStr .= ' HAVING '。 $having;
  486. return $havingStr;
  487. }
  488. /**
  489. * フィールド分析
  490. * @access 関数
  491. * @parammixed $fields
  492. * @return string
  493. */
  494. function parseFields($fields) {
  495. if(is_array($fields)) {
  496. array_walk($fields, array($this, 'addSpecialChar) '));
  497. $fieldsStr = implode(',', $fields);
  498. }else if(is_string($fields) && !empty($fields)) {
  499. if( false === strpos($fields,' `') ) {
  500. $fields =explode(',',$fields);
  501. array_walk($fields, array($this, 'addSpecialChar'));
  502. $fieldsStr = implode(',', $fields);
  503. }else {
  504. $fieldsStr = $fields;
  505. }
  506. }else $fieldsStr = '*';
  507. return $fieldsStr;
  508. }
  509. /**
  510. * データ更新時に呼び出される分析を設定します
  511. * @access 関数
  512. * @parammixed $values
  513. * @return string
  514. */
  515. プライベート関数 parseSets($sets) {
  516. $ setStr = '';
  517. if(is_array($sets)){
  518. foreach ($sets as $key=>$val){
  519. $key = self::addSpecialChar($key);
  520. $val = self:: fieldFormat($val);
  521. $setsStr .= "$key = ".$val.",";
  522. }
  523. $setsStr = substr($setsStr,0,-1);
  524. }else if(is_string($sets) )) {
  525. $setsStr = $sets;
  526. }
  527. return $setsStr;
  528. }
  529. /**
  530. * フィールドの書式設定
  531. * @access 関数
  532. * @parammixed $value
  533. * @returnmixed
  534. */
  535. 静的関数 fieldFormat(&$value) {
  536. if(is_int($value)) {
  537. $ value = intval($value);
  538. } else if(is_float($value)) {
  539. $value = floatval($value);
  540. } elseif(preg_match('/^(w*(+|-|*|/ )?w*)$/i',$value)){
  541. // 在字段の值里面直接使用をサポート
  542. // 例 (score+1) (name) 必须包含号
  543. $value = $value;
  544. }else if(is_string($value)) {
  545. $value = '''.self::escape_string($value).''';
  546. }
  547. return $value;
  548. }
  549. /**
  550. * フィールド名とテーブル名に ` を追加すると、命令内でキーワードを使用するときにエラーが発生しないようにするための
  551. * に準拠します。
  552. * @access 関数
  553. * @parammixed $value
  554. * @returnmixed
  555. * /
  556. 静的関数 addSpecialChar(&$value) {
  557. if( '*' == $value || false !== strpos($value,'(') || false !== strpos($value,'.') || false !== strpos($value,'`')) {
  558. //如果包含* または使用了sqlメソッド则不作处理
  559. } elseif(false === strpos($value,'`') ) {
  560. $value = '`'.trim($value).'`';
  561. }
  562. return $value;
  563. }
  564. /**
  565. +------------------------------------------------ ----------
  566. * 空の要素を削除します
  567. +--------------------------------- -----------------------------
  568. * @アクセス機能
  569. +-------------- ---- --------------------------------------
  570. * @param 混合$値
  571. +- ---------------------------------------------- ---- -------
  572. * @return 混合
  573. +-------------------------------- ---- -----------------------
  574. */
  575. static function RemoveEmpty($value){
  576. return !empty($value);
  577. }
  578. /**
  579. * SELECT、SHOWなどの命令を中心にクエリを実行
  580. * @access関数
  581. * @param string $sql SQL命令
  582. * @returnmixed
  583. */
  584. static function query($sql ='') {
  585. // 获取数据库联接
  586. $link = self::$link;
  587. if ( !$link ) return false;
  588. self::$queryStr = $sql;
  589. //释放前回の查询結果
  590. if ( !empty(self::$PDOStatement) ) self::free();
  591. self::$PDOStatement = $link->prepare(self::$queryStr);
  592. $bol = self::$PDOStatement ->execute();
  593. // 有错误则抛出异常
  594. self::haveErrorThrowException();
  595. return $bol;
  596. }
  597. /**
  598. * データベース操作方法
  599. * @access関数
  600. * @param string $sql実行文
  601. * @param boolean $lock ロックするかどうか(デフォルトはロックなし)
  602. * @return void
  603. public functionexecute($sql='') ,$ lock=false) {
  604. if(empty($sql)) $sql = $this->queryStr;
  605. return $this->execute($sql);*/
  606. /**
  607. * INSERT、UPDATE、DELETE の実行ステートメント
  608. * @access 関数
  609. * @param string $sql SQL コマンド
  610. * @return integer
  611. */
  612. static functionexecute($sql='') {
  613. // 获取数据库联接
  614. $link = self::$link;
  615. if ( !$link ) return false;
  616. self::$queryStr = $sql;
  617. //释放前次的查询結果
  618. if ( !empty(self::$PDOStatement) ) self::free();
  619. $result = $link->exec(self::$queryStr);
  620. // 有错误则抛出异常
  621. self::haveErrorThrowException();
  622. if ( false === $result) {
  623. return 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. return true;
  640. }
  641. return false;
  642. }
  643. / **
  644. * POST 送信データをフィルターします
  645. * @access private
  646. * @parammixed $data POST 送信データ
  647. * @param string $table データテーブル名
  648. * @returnmixed$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[$key])!==''){
  655. $newdata[$key] = $data[$key];
  656. }
  657. }
  658. return $newdata;
  659. }
  660. /**
  661. * トランザクションを開始します
  662. * @access 関数
  663. * @return void
  664. */
  665. static function startTrans() {
  666. //データロールバックサポート
  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. return false;
  689. }
  690. }
  691. return true;
  692. }
  693. /**
  694. * トランザクションのロールバック
  695. * @access 関数
  696. * @return boolen
  697. */
  698. public function rollback() {
  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. return false;
  707. }
  708. }
  709. return true;
  710. }

  711. /**

  712. * エラー処理
  713. * @access 関数
  714. * @return void
  715. */
  716. static function throw_Exception($err){
  717. echo '
    エラー:'.$err.'
  718. }
  719. }

复制代


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!