PHP:使用数据库类
发布时间:2020-12-13 17:09:48 所属栏目:PHP教程 来源:网络整理
导读:我有一个类数据库和类用户.我的问题是我想创建一个 Database实例并在我的课程中使用它. 类用户只是其中之一.我希望能够使用数据库对象从表中获取用户记录.我不想在每个类中创建一个数据库变量,因为我将使用会话.有解决方案吗? class Database{ /* * Edit th
我有一个类数据库和类用户.我的问题是我想创建一个
Database实例并在我的课程中使用它.
类用户只是其中之一.我希望能够使用数据库对象从表中获取用户记录.我不想在每个类中创建一个数据库变量,因为我将使用会话.有解决方案吗? class Database { /* * Edit the following variables */ private $db_host = 'localhost'; // Database Host private $db_user = 'root'; // Username private $db_pass = ''; // Password private $db_name = 'researchportal'; // Database /* * End edit */ private $con = false; // Checks to see if the connection is active private $result = array(); // Results that are returned from the query /* * Connects to the database,only one connection * allowed */ public function connect() { if(!$this->con) { $myconn = @mysql_connect($this->db_host,$this->db_user,$this->db_pass); if($myconn) { $seldb = @mysql_select_db($this->db_name,$myconn); if($seldb) { $this->con = true; return true; } else { return false; } } else { return false; } } else { return true; } } /* * Changes the new database,sets all current results * to null */ public function setDatabase($name) { if($this->con) { if(@mysql_close()) { $this->con = false; $this->results = null; $this->db_name = $name; $this->connect(); } } } /* * Checks to see if the table exists when performing * queries */ private function tableExists($table) { $tablesInDb = @mysql_query('SHOW TABLES FROM '.$this->db_name.' LIKE "'.$table.'"'); if($tablesInDb) { if(mysql_num_rows($tablesInDb)==1) { return true; } else { return false; } } } /* * Selects information from the database. * Required: table (the name of the table) * Optional: rows (the columns requested,separated by commas) * where (column = value as a string) * order (column DIRECTION as a string) */ public function select($table,$rows = '*',$where = null,$order = null) { $q = 'SELECT '.$rows.' FROM '.$table; if($where != null) $q .= ' WHERE '.$where; if($order != null) $q .= ' ORDER BY '.$order; $query = @mysql_query($q); if($query) { $this->numResults = mysql_num_rows($query); for($i = 0; $i < $this->numResults; $i++) { $r = mysql_fetch_array($query); $key = array_keys($r); for($x = 0; $x < count($key); $x++) { // Sanitizes keys so only alphavalues are allowed if(!is_int($key[$x])) { if(mysql_num_rows($query) > 1) $this->result[$i][$key[$x]] = $r[$key[$x]]; else if(mysql_num_rows($query) < 1) $this->result = null; else $this->result[$key[$x]] = $r[$key[$x]]; } } } return true; } else { return false; } } /* * Insert values into the table * Required: table (the name of the table) * values (the values to be inserted) * Optional: rows (if values don't match the number of rows) */ public function insert($table,$values,$rows = null) { if($this->tableExists($table)) { $insert = 'INSERT INTO '.$table; if($rows != null) { $insert .= ' ('.$rows.')'; } for($i = 0; $i < count($values); $i++) { if(is_string($values[$i])) $values[$i] = '"'.$values[$i].'"'; } $values = implode(',',$values); $insert .= ' VALUES ('.$values.')'; $ins = @mysql_query($insert); if($ins) { return true; } else { return false; } } } /* * Deletes table or records where condition is true * Required: table (the name of the table) * Optional: where (condition [column = value]) */ public function delete($table,$where = null) { if($this->tableExists($table)) { if($where == null) { $delete = 'DELETE '.$table; } else { $delete = 'DELETE FROM '.$table.' WHERE '.$where; } $del = @mysql_query($delete); if($del) { return true; } else { return false; } } else { return false; } } /* * Updates the database with the values sent * Required: table (the name of the table to be updated * rows (the rows/values in a key/value array * where (the row/condition in an array (row,condition) ) */ public function update($table,$rows,$where) { if($this->tableExists($table)) { // Parse the where values // even values (including 0) contain the where rows // odd values contain the clauses for the row for($i = 0; $i < count($where); $i++) { if($i%2 != 0) { if(is_string($where[$i])) { if(($i+1) != null) $where[$i] = '"'.$where[$i].'" AND '; else $where[$i] = '"'.$where[$i].'"'; } } } $where = implode('',$where); $update = 'UPDATE '.$table.' SET '; $keys = array_keys($rows); for($i = 0; $i < count($rows); $i++) { if(is_string($rows[$keys[$i]])) { $update .= $keys[$i].'="'.$rows[$keys[$i]].'"'; } else { $update .= $keys[$i].'='.$rows[$keys[$i]]; } // Parse to add commas if($i != count($rows)-1) { $update .= ','; } } $update .= ' WHERE '.$where; $query = @mysql_query($update); if($query) { return true; } else { return false; } } else { return false; } } /* * Returns the result set */ public function getResult() { return $this->result; } } 班级用户: <?php require_once 'class.database.php'; class User{ public $usr_id; public $usr_name; public $usr_level; public $last_access_login; public function __construct($id) { $this->usr_id = $id; //$this->usr_name = $usr_name; //$this->usr_level = $usr_level; $this->last_access_login = date("F d Y H:i:s.",time()); } public function getUser() { // $db->select('login_users','*','user_id='.$this->usr_id.''); // $res = $db->getResult(); // print_r($res); $this->usr_name = $res['username']; $this->usr_level = $res['user_level']; $this->last_access_login = date("F d Y H:i:s.",time()); } } $a = new User(3); $a->getUser(); ?> 解决方法
您需要将$database传递给您的用户构造函数,或者使用像MrJ所建议的那样的单例.
如您所知,将数据库对象作为参数传递非常简单,但是您可以更清楚地了解其他对象: private $myDatabase = NULL; public function __construct(Database $myDatabase){ $this->myDatabase = $myDatabase; } 然后在课堂上你可以使用你的数据库 $this->myDatabase->select(...); 现在创建对象变得如此简单: $myUser = new User($database); 显然,根据需要调整它:) 单例也很简单,在数据库类中创建一个静态方法: private static $staticInstance = NULL; public static function getInstance(){ if(Database::$staticInstance == NULL){ Database::$staticInstance = new Database(); Database::$staticInstance->connect(); } return Database::$staticInstance; } 这将创建一个函数,在您需要时自动创建您的唯一数据库类的实例,并在再次调用getInstance时返回该单个实例. 要在其他类中使用它,只需调用: $mydb = Database::getInstance(); 然后使用你的数据库对象…… 单身人士在许多类似的情况下非常有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读