和数据库直接接触的类,只是封装了增删改查。
~~~
<?php
//判断当前请求是否正常,如果不是通过index.php进行访问的,就退出系统
if(!defined('ACCESS')) die('Hacking');
class Db{
public $conn;
public $host;
public $port;
public $user;
public $password;
public $db;
public $charset;
/*
* 构造函数,同时连接数据库
* @param string 主机名
* @param string 端口号
* @param string 用户名
* @param string 密码
* @param string 数据库
* @param string 编码方式
*/
public function __construct($arr=array()){
//从配置文件中获取必要信息
$this->host=isset($arr['host']) ? $arr['host'] : $GLOBALS['config']['mysql']['host'];
$this->port=isset($arr['port']) ? $arr['port'] : $GLOBALS['config']['mysql']['port'];
$this->user=isset($arr['user']) ? $arr['user'] : $GLOBALS['config']['mysql']['user'];
$this->password=isset($arr['password']) ? $arr['password'] : $GLOBALS['config']['mysql']['password'];
$this->db=isset($arr['db']) ? $arr['db'] : $GLOBALS['config']['mysql']['db'];
$this->charset=isset($arr['charset']) ? $arr['charset'] : $GLOBALS['config']['mysql']['charset'];
//连接数据库
$this->connect_db();
}
/*
* 连接数据库
*/
public function connect_db(){
$this->conn=mysql_connect($this->host.":".$this->port,$this->user,$this->password);
if (!$this->conn){
die("连接数据库失败:".mysql_error());
}
mysql_select_db($this->db);
mysql_query("set names {$this->charset}");
}
/*
* 操作dql查询语句
*/
public function execute_dql($sql){
$res=mysql_query($sql,$this->conn) or die(mysql_errno().":".mysql_error());
$i=0;
$arr=array();
while ($row=mysql_fetch_assoc($res)){ //将结果集存放在一个数组里面,这样就用完结果集了
$arr[$i++]=$row;
}
mysql_free_result($res); //关闭结果集,释放资源
return $arr;
}
/*
* 操作dml语句
*/
public function execute_dml($sql){
$res=mysql_query($sql,$this->conn) or die(mysql_errno().":".mysql_error());
if (!$res) {
//失败
return 0;
}else{
if (mysql_affected_rows($this->conn)>0){
//成功,并且修改了数据的数据
return 1;
}else {
//成功,但是没有影响任何一行,语句正确不一定有真正的操作到了数据库的数据
return 2;
}
}
}
//关闭连接
public function close_connect(){
if (!empty($this->conn)) { //先判断一下,如果还连着,就断掉
mysql_close($this->conn);
}
}
}
~~~
>[info]如果用户连接数据库时没有自定义连接参数,就从配置文件中获取
>[info]调用方法`execute_dql`后,将查询得到的结果集放在到了二维数组中返回。
mysqli方式
~~~
<?php
//判断当前请求是否正常,如果不是通过index.php进行访问的,就退出系统
if(!defined('ACCESS')) die('Hacking');
class Db{
public $mysqli;
public $host;
public $port;
public $user;
public $password;
public $db;
public $charset;
/*
* 构造函数,同时连接数据库
* @param string 主机名
* @param string 端口号
* @param string 用户名
* @param string 密码
* @param string 数据库
* @param string 编码方式
*/
public function __construct($arr=array()){
//从配置文件中获取必要信息
$this->host=$GLOBALS['config']['mysql']['host'];
$this->port=$GLOBALS['config']['mysql']['port'];
$this->user=$GLOBALS['config']['mysql']['user'];
$this->password=$GLOBALS['config']['mysql']['password'];
$this->db=$GLOBALS['config']['mysql']['db'];
$this->charset=$GLOBALS['config']['mysql']['charset'];
//连接数据库
$this->connect_db();
}
/*
* 连接数据库
*/
public function connect_db(){
$this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->db);
if ($this->mysqli->connect_error) {
die("连接数据库失败:".$mysqli->connect_error);
}
if (!$this->mysqli->set_charset("utf8")) {
die("设置默认字符编码失败:".$mysqli->error);
}
}
/*
* 操作mysqli预处理
*/
public function execute_prepare($sql){
$stmt = $this->mysqli->prepare($sql);
return $stmt;
}
/*
* 执行sql查询语句
*/
public function execute_dql($stmt){
$stmt->execute();
$result = $stmt->get_result()->fetch_all();
//关闭结果集
$stmt->free_result();
$stmt->close();
//操作完成数据库后,要及时关闭连接,不然比较浪费资源。还有如果不关闭,插入一条记录时可能会变成插入两条
$this->mysqli->close();
return $result;
}
/*
* 操作dml语句
*/
public function execute_dml($stmt){
$res=$stmt->execute();
if(!$res){
//失败
$stmt->close();
$this->mysqli->close();
return 0;
}else{
if($stmt->affected_rows>0){
//成功,并且修改了数据的数据
$stmt->close();
$this->mysqli->close();
return 1;
}else{
//成功,但是没有影响任何一行,语句正确不一定有真正的操作到了数据库的数据
$stmt->close();
$this->mysqli->close();
return 2;
}
}
}
}
~~~