Investigation into chillyCMS (Day1)


This time, I go through from down to top, for simplicity. And the most simple class should be the one responsible for database accessing, relying on none custom class.


DataBase Class


There really does be one, database.class.php:


<?php
//##############################################################################
//	Database class
//##############################################################################
//	chillyCMS - Content Management System
//##############################################################################

if (file_exists('config.php'))
{
	require_once('config.php');
}
elseif (file_exists('../config.php'))
{
	require_once('../config.php');
}
elseif (file_exists('../../config.php'))
{
	require_once('../../config.php');
}
require_once(PATH.'/core/helpers.include.php');

class Database {

	//Class variables///
	private $host;			//db server address
	private $username;		//db username
	private $password;		//db password
	public	$database;		//db name
	private $lastquery;		//last executed query
	public $connection;		//actual connection to db
	
	//Functions/
	//Constructor
	function __construct()
	{
		$this->host		= DB_HOST;
		$this->username		= DB_USER;
		$this->password		= DB_PW;
		$this->database		= DB_DB;
		$this->lastquery	= false;
		$this->connection	= false;
		$this->connect();
	}
	
	//Destructor
	function __destruct()
	{
		$this->close();
	}
	
	//connect to the database
	private function connect()
	{
		//try to connect to the db Server
		$this->connection = @mysql_connect($this->host, $this->username, $this->password);

		if($this->connection == false)
		{
			die("Cannot connect to server '".$this->host."'");
		}
		//try to select the db
		$dbconnect = @mysql_select_db($this->database, $this->connection);
		if($dbconnect == false)
		{
			die("Cannot connect to database '".$this->database."'");
		}
	}
	
	//do a query
	public function query($sql)
	{
		$return = false;
		//echo "<em>Class DB:</em> $sql<br>";
		if (is_resource($this->connection))
		{
			if ($this->lastquery = mysql_query($sql, $this->connection))
			{
				$return = true;
			}
		}
		return $return;
	}
	
	//get a whole table
	public function get_table($table,$order=1)
	{
		$table=$this->escape($table);
		$order=$this->escape($order);
		if ($this->query("select * from $table order by $order"))
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	//escape a given string
	public function escape($string)
	{
		if(get_magic_quotes_gpc())
		{
			$string = stripslashes($string);
		}
		return @mysql_real_escape_string($string,$this->connection);
	}

	//get query result in a form depending on the number of returned rows
	public function getdata()
	{
		$resultCount = @mysql_num_rows($this->lastquery);
		$result = false;

		//if only one line is returned save it in a var
		if ($resultCount==1)
		{
			$result = @mysql_fetch_assoc($this->lastquery);

		}
		//if there are more lines save them in an array
		else if ($resultCount > 1)
		{
			while($row = @mysql_fetch_assoc($this->lastquery))
			{
				$result[]=$row;
			}
		}
		else
		{
			$result = true;
		}
		return $result;
	}
	
	//get query result as array
	public function getdata_array() {
		$result=array();
		while($row = @mysql_fetch_assoc($this->lastquery))
		{
			$result[]=$row;
		}
		return $result;
	}
	
	//get result count
	public function query_count()
	{
		return @mysql_num_rows($this->lastquery);
	}
	
	//find out next autoincrement value
	public function next_autoincrement($table)
	{
		$table = $this->escape($table);
		if ($this->query("show table status like '$table'"))
		{
			$result=$this->getdata();
			$result=$result["Auto_increment"];
		}
		else
		{
			$result=false;
		}
		return $result;
	}
	
	//close the database connection
	public function close()
	{
		if (is_resource($this->lastquery))
		{
			@mysql_free_result($this->lastquery);
		}
		if (is_resource($this->connection))
		{
			@mysql_close($this->connection);
		}
		$this->lastquery=$this->connection=$this->host=$this->username=$this->password=$this->database=false;
		unset($this);
	}
} 
?>

It cut up the process of fetching data from mySQL into 3 pieces: 

1. connecting to mySQL, 

2. executing a query, 

3. loading the data from return result to local array.





 

Constructor & Destructor in PHP5:


According to doc on php.net, __construct() and __destruct() are new-standard method for construction and destruction.


Shorthand Approach of Assignment to Array:


There is block in the php file:


			while($row = @mysql_fetch_assoc($this->lastquery))
			{
				$result[]=$row;
			}

I design my own test and the result goes as fine as expection:


<?php
/*
 * Created on 2011/7/26
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */

$host = 'localhost';
$user = 'root';
$pass = 'admin';
$dbname = 'simplebbs';

$char = 'utf8';

$lastq = false;

if($db=@mysql_connect($host, $user, $pass))
{
  if(@mysql_select_db($dbname,$db))
  {
  	//echo 'yes';
	mysql_query('SET NAMES '.$char.'');
	$res = array();
	if($lastq = mysql_query('select * from bbslistdata'))
	{
		echo 'yes';echo "\n<br>";
		echo @mysql_num_rows($lastq);
		while($row = @mysql_fetch_assoc($lastq))
		{
			$res[] = $row;
		}

	}
	print_r($res);

  }
  else
  {
    //$err.='';
  }
  mysql_close();
}

?>

Actually, it is just a short-hand method for puting data into an array through a loop. And after palying around with php.net array section, I found that it is a common manner in pratice.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值