Heim  >  Artikel  >  Backend-Entwicklung  >  MYSQLI-Operationsklasse

MYSQLI-Operationsklasse

巴扎黑
巴扎黑Original
2016-11-24 09:31:171123Durchsuche

<?php 
/** 
* Mysqli类 
* 
* @author 废墟 
* @version v1.0 2009-08-18 
* @link http://anerg.cn/ 
*/ 
class db_mysqli { 
protected $mysqli; 
protected $sql; 
protected $rs; 
protected $query_num    = 0; 
protected $fetch_mode    = MYSQLI_ASSOC; 
protected $cache_dir    = &#39;./cache/&#39;; 
protected $cache_time    = 1800; 
public function  __construct($dbhost, $dbuser, $dbpass, $dbname) { 
$this->mysqli    = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
if(mysqli_connect_errno()) { 
$this->mysqli    = false; 
echo &#39;<h2>&#39;.mysqli_connect_error().&#39;</h2>&#39;; 
die(); 
} else { 
$this->mysqli->set_charset("utf8"); 
} 
} 
public function  __destruct() { 
$this->free(); 
$this->close(); 
} 
protected function free() { 
@$this->rs->free(); 
} 
protected function close() { 
$this->mysqli->close(); 
} 
protected function fetch() { 
return $this->rs->fetch_array($this->fetch_mode); 
} 
protected function getQuerySql($sql, $limit = null) { 
if (@preg_match("/[0-9]+(,[ ]?[0-9]+)?/is", $limit) && !preg_match("/ LIMIT [0-9]+(,[ ]?[0-9]+)?$/is", $sql)) { 
$sql .= " LIMIT " . $limit; 
} 
return $sql; 
} 
protected function get_cache($sql,$method) { 
include_once &#39;./cache.php&#39;;//若框架中使用__autoload(),这里可以不用加载文件 
$cache    = new cache($this->cache_dir,$this->cache_time); 
$cache_file    = md5($sql.$method); 
$res    = $cache->get_cache($cache_file); 
if(!$res) { 
$res    = $this->$method($sql); 
$cache->set_cache($cache_file, $res); 
} 
return $res; 
} 
public function query_num() { 
return $this->query_num; 
} 
public function set_cache_dir($cache_dir) { 
$this->cache_dir    = $cache_dir; 
} 
public function set_cache_time($cache_time) { 
$this->cache_time    = $cache_time; 
} 
public function query($sql, $limit = null) { 
$sql    = $this->getQuerySql($sql, $limit); 
$this->sql    = $sql; 
$this->rs    = $this->mysqli->query($sql); 
if (!$this->rs) { 
echo "<h2>".$this->mysqli->error."</h2>"; 
die(); 
} else { 
$this->query_num++; 
return $this->rs; 
} 
} 
public function getOne($sql) { 
$this->query($sql, 1); 
$this->fetch_mode    = MYSQLI_NUM; 
$row = $this->fetch(); 
$this->free(); 
return $row[0]; 
} 
public function get_one($sql) { 
return $this->getOne($sql); 
} 
public function cache_one($sql) { 
$sql    = $this->getQuerySql($sql, 1); 
return $this->get_cache($sql, &#39;getOne&#39;); 
} 
public function getRow($sql, $fetch_mode = MYSQLI_ASSOC) { 
$this->query($sql, 1); 
$this->fetch_mode    = $fetch_mode; 
$row = $this->fetch(); 
$this->free(); 
return $row; 
} 
public function get_row($sql, $fetch_mode = MYSQLI_ASSOC) { 
return $this->getRow($sql);
} 
public function cache_row($sql) { 
$sql    = $this->getQuerySql($sql, 1); 
return $this->get_cache($sql, &#39;getRow&#39;); 
} 
public function getAll($sql, $limit = null, $fetch_mode = MYSQLI_ASSOC) { 
$this->query($sql, $limit); 
$all_rows = array(); 
$this->fetch_mode    = $fetch_mode; 
while($rows = $this->fetch()) { 
$all_rows[] = $rows; 
} 
$this->free(); 
return $all_rows; 
} 
public function get_all($sql, $limit = null, $fetch_mode = MYSQLI_ASSOC) { 
return $this->getAll($sql); 
} 
public function cache_all($sql, $limit = null) { 
$sql    = $this->getQuerySql($sql, $limit); 
return $this->get_cache($sql, &#39;getAll&#39;); 
} 
public function insert_id() { 
return $this->mysqli->insert_id(); 
} 
public function escape($str) { 
if(is_array($str)) { 
foreach($str as $key=>$val) { 
$str[$key] = $this->escape($val); 
} 
} else { 
$str = addslashes(trim($str)); 
} 
return $str; 
} 
} 
//用法 
$db    = new db_mysqli(&#39;localhost&#39;, &#39;root&#39;, 111222, &#39;dict&#39;); 
$db->set_cache_time(10); 
$db->set_cache_dir(&#39;./cache/sql/&#39;); 
$sql = "select * from words order by word_id limit 10,10"; 
$res1 = $db->get_all($sql); 
$res2 = $db->cache_all($sql); 
echo $db->query_num(),&#39;<br>&#39;; 
?>

Objekte der Klasse mysqli steuern hauptsächlich die Verbindung zwischen PHP und dem MySQL-Datenbankserver, wählen die Datenbank aus, senden SQL-Anweisungen an den MySQL-Server und legen den Zeichensatz fest usw. Diese Aufgaben werden alle über erledigt Die in dieser Klasse deklarierte Konstruktormethode, Mitgliedsmethoden und Mitgliedsattribute sind abgeschlossen. In Tabelle 13-1 und Tabelle 13-2 sind die in der Klasse mysqli deklarierten Mitgliedsmethoden und Mitgliedsattribute aufgeführt.

Tabelle 13-1 Mitgliedsmethoden in der MySQL-Klasse (insgesamt 33)

MYSQLI-Operationsklasse

MYSQLI-Operationsklasse

MYSQLI-Operationsklasse


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:php--if/else/elseif/else ifNächster Artikel:php--if/else/elseif/else if