面向对象来实现数据库操作

本文介绍了一个用于操作MySQL数据库的PHP类,支持多种数据返回格式,包括二维数组、一维数组及单个值。提供了连接数据库、执行SQL语句等功能,并演示了如何使用此类进行数据插入、查询等操作。
/*一个文件MySQLDB.class.php中包含了一个类来连接数据库、
执行语句的方法、
将查询到的结果集通过数组返回的方法。

*/
<?php
//类名与文件名类似
//可连接数据库
//并实现其单类模式,
//还能完成基本mysql模式
//执行普通的增删改非返回结果集的语句
//执行select语句并可以返回3中类型的数据:
//多行结果(二维数组),单行结果(一维数组),单行单列(数据)
class MySQLDB{
	public $host;        //连接主机
	public $port;        //连接端口
	public $username;    //连接用户名
	public $password;    //连接密码
	public $charset;     //连接编码
	public $dbname;      //连接数据库名
	private static $link;    //实现该类的单例对象
	private $resource;       //连接数据库返回的资源
	//禁止new
	private function __construct($config){
                /*通过__construct方法来将所需连接数据库信息传入
                */
                
		$this->host = isset($config['host']) ? $config['host'] : 'localhost';
		$this->port = isset($config['port']) ? $config['port'] : '3306';
		$this->username = isset($config['username']) ? $config['username'] : 'root';
		$this->password = isset($config['password']) ? $config['password'] : 'forlove123';
		$this->charset = isset($config['charset']) ? $config['charset'] : 'utf8';
		$this->dbname = isset($config['dbname']) ? $config['dbname'] : 'newphp';
		
		//连接数据库的函数调用,没件事独立使用
		$this->connect();
		//设定连接编码
		$this->setCharset($this->charset);
		//选定数据库
		$this->selectDb($this->dbname);
	}
	public static function getInstance($config){
		if(!isset(self::$link)){
			self::$link = new self($config);		//参数问题
		}
		return self::$link;
	} 
	//禁止克隆
	private function __clone(){}
	public function connect(){
		$this->resource = mysql_connect("$this->host:$this->port", "$this->username", "$this->password") or die("连接数据库失败");
	}
	public function setCharset($charset){
		//mysql_set_charset($charset, self::$link);
		mysql_query("set names $charset");	//设置编码失败易于显示错误
	}
	public function selectDb($dbname){
		//mysql_select_db($dbname, self::$link);
		mysql_query("use $dbname");		//选择数据库失败易于显示错误
	}
	/*
	功能执行sql语句
	返回,失败直接结束,成功则返回执行结果
	*/
	public function query($sql){
		if(!$result = mysql_query($sql, $this->resource)){
			echo	"<br / >执行语句失败";
			echo	"<br />执行失败语句为:".$sql;
			echo	"<br />出错信息为:".mysql_error();
			echo	"<br />错误代号为:".mysql_errno();
			die();
		}
		return $result;
	}
	/*
	执行select语句返回二维数组
	参数:$sql 字符串类型 select语句
	*/
	public function getAll($sql){
		$result = $this->query($sql);
		$arr = array();
		while( $rec = mysql_fetch_assoc( $result )){
			$arr[] = $rec;
		}
		return $arr;
	}
	public function getRow($sql){
		$result = $this->query($sql);
		while( $rec = mysql_fetch_assoc( $result )){	//返回下标为字段名的下标
			//如果取得了一行数据
			return $rec;
		}
		return false;
	}
	public function getOne($sql){
		$result = $this->query($sql);			//结果集为0行也不会判断为false, 它是资源
		$rec = mysql_fetch_row($result);	//返回下标为数字的数组,且下标一定为0,1,2,3
		if($rec == false){
			return false;
		}
		return $rec[0];
	}
}
/*
测试文件:MysqlDb_use.php
*/
<?php
require 'MySQLDB.class.php';    //导入上文件

$config = array(
	'host' => 'localhost',
	'port' => '3306',
	'username' => 'root',
	'password' => 'forlove123',
	'charset' => 'utf8',
	'dbname' => 'newphp'
	);        //设置连接数据库信息
$link = MySQLDB::getInstance( $config );    //单例话一个对象那个
//var_dump($link);

//任务1:插入数据:        
$sql = "insert into money(zhanghu, cunkuan) values ('test3', 10000)";
if( $link ->query($sql) )
	echo	"执行成功";
//任务2获取账户所有信息
$sql = "select * from money";
$result = $link->getAll($sql);
echo	"<pre>";
//print_r($result);
echo	"<table border = '1'>";
	foreach ($result as $rows){
		echo	"<tr>";
			foreach ($rows as $key => $value){
				echo	"<td>$value</td>";
			}
		echo	"</tr>";
	}
echo	"</table>";
echo	"</pre>";
//任务3:获取某个账户信息(一行数据):
$sql = "select * from  money where id = 1";
$result = $link->getRow($sql);	//得到一维数组
if($result){
	echo	"<br />账户ID:".$result['id'];
	echo	"<br />账户名:".$result['zhanghu'];
	echo	"<br />存款为:".$result['cunkuan'];
}
else 
	echo	"<br />账户不存在!!!";

//获取银行的存款总和
$sql = "select sum(cunkuan) as s from money ";
$result = $link->getOne($sql);
if($result)
	echo	"<br />总存款为:".$result;
else
	echo	"";
?>





测试结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值