ホームページ >バックエンド開発 >PHPチュートリアル >データベース接続とテキスト キャッシュのためのシンプルで包括的なクラス

データベース接続とテキスト キャッシュのためのシンプルで包括的なクラス

WBOY
WBOYオリジナル
2016-07-25 08:49:36897ブラウズ
特別なことは何もせず、データベース接続とテキスト キャッシュをクラスにカプセル化するだけです。
  1. class Db{
  2. protected $_connect;
  3. protected $_db = Array();
  4. protected $_cache = Array();
  5. public function __construct($args){
  6. list($this->_db, $this->_cache) = $args;
  7. }
  8. 保護関数 connect($db){
  9. $this->_connect = mysql_connect($db['ホスト名'],$db['ユーザー名'],$db ['パスワード']);
  10. mysql_set_charset('UTF8');
  11. mysql_select_db($db['データベース名'],$this->_connect);
  12. }
  13. /**
  14. *機能: テーブル内のデータを取得し、クエリされたデータを配列形式で返します。
  15. *$sql: 実行される受信 SQL ステートメントは SELECT である必要があり、SELECT のみにすることができます
  16. *
  17. */
  18. public function fetch( $sql){
  19. $result = '';
  20. if(isset($this->_cache['expire'])){
  21. $name = md5(strto lower(str_replace(' ','',$sql)) );
  22. $dir = substr($name,0,2);
  23. $dir = $this->_cache['dir'].'/'.$dir;
  24. !is_dir($dir) && mkdir($ dir,0777);
  25. !is_dir($dir) && mkdir($dir,0777);
  26. $this->_cache['path'] = $dir.'/'.$name;
  27. if(is_file($ this->_cache['path']) && $this->check_expire()){
  28. $result = $this->get();
  29. }
  30. }
  31. if($result == ''){
  32. $data = $this->exec($sql);
  33. $result = Array();
  34. while($result[] = mysql_fetch_array($data,MYSQL_ASSOC)){} //インデックスを削除
  35. mysql_free_result($data );
  36. array_pop($result);
  37. isset($this->_cache['expire']) && $this->write($result);
  38. }
  39. return $result;
  40. }
  41. /**
  42. *機能: SELECT を除くすべての SQL ステートメントを実行します。
  43. *$sql: 実行する受信 SQL ステートメントは SELECT にすることはできません
  44. *戻り値: TRUE または FALSE
  45. */
  46. public function exec($sql){
  47. if($this->_connect === null) $this->connect($this->_db); //データリンクを実行します
  48. if( $result = mysql_query($sql, $this->_connect) ){
  49. return $result;
  50. }else{
  51. die("{$sql}
    実行エラー: " . mysql_error());
  52. }
  53. }
  54. /**
  55. *機能: データベース挿入ステートメントを実行します。これは INSERT ステートメントのみです。
  56. *$v: 実行される渡される条件は配列形式であり、table は挿入されるテーブルを表し、row はフィールド、value は挿入される値です
  57. *戻り値: mysql_insert_id() OR FALSE
  58. */
  59. public function insert($table,$field,$ignore = 0){
  60. $D = Array('field'=>'','val'=>'');
  61. foreach($field AS $key => $v){
  62. $D['field'] .= $key.',';
  63. $D['val'] .= "'{$this->escape($v)} ',";
  64. }
  65. $D['フィールド'] = rtrim($D['フィールド'],',');
  66. $D['val'] = rtrim($D['val'],' ,');
  67. $ignore = $ignore > 'IGNORE' : '';
  68. $sql = "INSERT {$ignore} INTO {$this->_db['perfix']}{$table}( {$D[' field']}) VALUES({$D['val']})";
  69. if($this->exec($sql)){
  70. $insert_id = mysql_insert_id();
  71. return is_numeric ($insert_id) ? $insert_id : TRUE;
  72. }else{
  73. return FALSE;
  74. }
  75. }
  76. public function update($table,$field){
  77. $D = Array('where'=>'',' str'=> '');
  78. $index = 0;
  79. foreach($field AS $key => $v){
  80. $index == 0 ? $D['where'] = "{$key} = '{$this ->escape($v)}'" : $D['str'] .= "{$key} = '{$this->escape($v)}',";
  81. $index++;
  82. }
  83. $D['str'] = rtrim($D['str'],',');
  84. $sql = "UPDATE {$this->_db['perfix']}{$ table} SET {$ D['str']} WHERE {$D['where']}";
  85. return $this->exec($sql);
  86. }
  87. public function delete($table,$field ){
  88. $str = '';
  89. foreach($field AS $key => $v){
  90. $str = "{$key} = '{$v}'";
  91. }
  92. $sql = 'DELETE FROM '.$this ->_db['perfix'].$table.' WHERE '.$str.';
  93. return $this->exec($sql);
  94. }
  95. public function sum( $table,$condition ){
  96. $totle = $this->fetch('SELECT COUNT(*) AS totle FROM '.$this->db['perfix'].$table.' WHERE '.$condition );
  97. return $ totle[0]['totle'];
  98. }
  99. /**
  100. *関数: 入力された特殊文字をフィルタリングします
  101. *$v: 検出のために渡されるパラメータ
  102. *戻り値: 検出されたパラメータ
  103. */
  104. public functionscape($v){
  105. return mysql_real_escape_string($v);
  106. }
  107. /*
  108. *関数: キャッシュ判定を行う
  109. */
  110. public function cache($name,$expire=100000000){
  111. $this->_cache['expire'] = $expire;
  112. return $this;
  113. }
  114. public function check_expire( ){
  115. return ( filemtime($this->_cache['path']) + $this->_cache['expire']) > strtotime("now");
  116. }
  117. public function write($ data){
  118. $ f = fopen($this->_cache['path'], 'w');
  119. if ($f) {
  120. flock($f, LOCK_EX);
  121. fseek($f, 0) ;
  122. ftruncate($ f, 0);
  123. $tmp = fwrite($f, Serialize($data));
  124. if (!($tmp === false)) {
  125. $result = true;
  126. }
  127. fclose ($f);
  128. }
  129. chmod($this->_cache['path'],0777);
  130. }
  131. public function get(){
  132. $f = fopen($this->_cache['path' ], 'r' );
  133. $data = fread($f,filesize($this->_cache['path']));
  134. fclose($f);
  135. return unserialize($data);
  136. }
  137. public function delete_dir($ dir = ''){
  138. $dir = empty($dir) ? $this->_cache['dir'] : $dir;
  139. !is_dir($dir) && exit;
  140. $d = opendir($dir) ;
  141. $i = 0;
  142. while(($file = readdir($d)) !== false){
  143. $path = $dir.'/'.$file;
  144. if($i > 1) is_file ($path) ? unlink($path) : $this->delete_dir($path);
  145. $i++;
  146. }
  147. Closedir($d);
  148. rmdir($dir);
  149. }
  150. public function __destruct() {
  151. isset($this->_connect) && mysql_close($this->_connect);
  152. }
  153. }
コードをコピー


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