版本一:
conn=mysqli_connect($this->host,$this->username,$this->password,$this->dbname);
if (!$this->conn) {
mysqli_error($this->conn);
die("连接失败".mysqli_error($this->conn));
}
//设置访问数据库的编码
mysqli_query($this->conn, "set names utf8") or die(mysqli_error($this->conn));
}
//执行dql语句
public function execute_dql($sql) {
$res=mysqli_query($this->conn,$sql) or die(mysqli_error($this->conn));
return $res;
}
//执行dql语句,但是返回的是一个数组
public function execute_dql2($sql) {
$arr=array();
$res=mysqli_query($this->conn,$sql) or die(mysqli_error($this->conn));
//$i=0;
while($row=mysqli_fetch_assoc($res)) {
//$arr[$i++]=$row;
$arr[]=$row;
}
//这里就可以马上把$res关闭
mysqli_free_result($res);
return $arr;
}
//考虑分页情况的查询,这是一个比较通用的并体现oop编程思想的代码
//$sql1="select * from where 表名 limit 0,6";
//$sql2="select * from count(id) from 表名";
public function execute_dql_fenye($sql1,$sql2,$fenyePage) {
//分页显示的数据
$res=mysqli_query($this->conn, $sql1) or die(mysqli_error($this->conn));
$arr=array();
while($row=mysqli_fetch_assoc($res)) {
$arr[]=$row;
}
//这里就可以马上把$res关闭
mysqli_free_result($res);
$res2=mysqli_query($this->conn, $sql2) or die(mysqli_error($this->conn));
if($row=mysqli_fetch_row($res2)) {
$fenyePage->pageCount=ceil($row[0]/$fenyePage->pageSize);
$fenyePage->rowCount=$row[0];
}
mysqli_free_result($res2);
$fenyePage->res_array=$arr;
$navigation="";
$navigation.= "首页 ";
//显示上一页和下一页
if($fenyePage->pageNow > 1) {
$prePage=$fenyePage->pageNow-1;
$navigation.= "上一页 ";
}
$page_whole=10;//整体翻几页
$start=(floor(($fenyePage->pageNow-1)/$page_whole))*$page_whole+1;
$end=$start+$page_whole;
//整体每10页向前翻页
//如果当前pageNow在1-10
if ($fenyePage->pageNow>$page_whole)
$navigation.= "<< ";
for(;$start<$end && $start<=$fenyePage->pageCount;$start++) {
$navigation.= "[$start]";
}
if($start <= $fenyePage->pageCount)
$navigation.= " >>";
//显示上一页和下一页
if($fenyePage->pageNow < $fenyePage->pageCount) {
$nextPage=$fenyePage->pageNow+1;
$navigation.= " 下一页 ";
}
$navigation.= "尾页 ";
//显示当前页和共有多少页
$navigation.= "第{$fenyePage->pageNow}页/共{$fenyePage->pageCount}页";
$fenyePage->navigation=$navigation;
}
//执行dml语句
public function execute_dml($sql) {
$b=mysqli_query($this->conn, $sql) or die(mysqli_error($this->conn));
if(!$b) {
return 0;
} else {
if(mysqli_affected_rows($this->conn)>0) {
return 1;//表示执行成功
} else {
return 2;//表示没有行收到影响
}
}
}
//关闭连接的方法
public function close_connect() {
if(!empty($this->conn))
mysqli_close($this->conn);
}
}
?>
版本二:(来源于慕课网的学习)
err(mysql_error());
}
if(!mysql_select_db($dbname, $con)) { //mysql_select_db 选择数据库的函数
$this->err(mysql_error());
}
mysql_query("set names ".$dbcharset); //使用mysql_query 设置编码,格式: mysql_query("set names utf8")
}
/*
执行sql语句
@param string $sql
@return bool 返回执行成功、资源或执行失败
*/
function query($sql) {
if(!($query = mysql_query($sql))) { //使用mysql_query函数执行sql语句
$this->err($sql."
".mysql_error()); //mysql_error报错
} else {
return $query;
}
}
/*
列表
@param source $query sql语句通过mysql_query 执行出来的资源
@return array 返回列表数组
*/
function findAll($query) {
while($rs = mysql_fetch_array($query, MYSQL_ASSOC)) { //mysql_fetch_array函数把资源换为数组,一次转换出一行出来
$list[] = $rs;
}
//这里应该释放结果集吧
//mysql_free_result($query)
return isset($list) ? $list : "";
}
/*
单条
@param source $query sql语句通过mysql_query执行出来的资源
return array 返回单条信息数据
*/
function findOne($query) {
$rs = mysql_fetch_array($query, MYSQL_ASSOC);
return $rs;
}
/*
指定行的指定字段的值
@param source $query sql语句通过mysql_query执行出来的资源
return array 返回指定行的指定字段的值
*/
function findResult($query, $row = 0, $field = 0) {
$rs = mysql_result($query, $row, $field);
return $rs;
}
/*
添加函数
@param string $table 表名
@param array $arr 添加数组(包含字段和值的一维数组)
*/
function insert($table, $arr) {
// $sql = "insert into 表名(多个字段) values(多个值)";
// mysql_query($sql)
foreach ($arr as $key => $value) {
$value = mysql_real_escape_string($value);
$keyArr[] = "`".$key."`"; //把$arr数组当中的键名保存到$keyArr数组当中 insert into test(`a`,`b`,`c`) values... 其中 ` 防止字段中因关键字而出错
$valueArr[] = "'".$value."'"; //把$arr数组当中的键值保存到$valueArr当中,因为值多为字符串,而sql语句里面insert当中如果值是字符串的话要加单引号,所以这个地方要加上单引号
}
$keys = implode(",", $keyArr); //implode函数是把数组组合成字符串 implode(分隔符,数组)
$values = implode(",", $valueArr);
$sql = "insert into ".$table."(".$keys.") values(".$values.")"; //sql的插入语句 格式:insert into 表(多个字段) values(多个值)
$this->query($sql); //调用类自身的query(执行)方法执行这条sql语句 注:$this指代自身
return mysql_insert_id();
}
/*
修改函数
@param string $table 表名
@param array $arr 修改数组(包含字段和值的一维数组)
@param string $where 条件
*/
function update($table, $arr, $where) {
//update 表名 set 字段=字段值 where ....
foreach($arr as $key=>$value) {
$value = mysql_real_escape_string($value);
$keyAndvalueArr[] = "`".$key."`='".$value."'";
}
$keyAndvalues = implode(",", $keyAndvalueArr);
$sql = "update ".$table." set ".$keyAndvalues." where ".$where; //修改操作 格式update
}
/*
删除函数
@param string $table 表名
@param string $where 条件
*/
function del($table, $where) {
$sql = "delete from ".$table." where ".$where; //删除sql语句 格式:delete from 表名 where 条件
return $this->query($sql);
}
}
?>
DB引擎工厂类
connect($config);
}
public static function query($sql) {
return self::$db->query($sql);
}
public static function findAll($sql) {
$query = self::$db->query($sql);
return self::$db->findAll($query);
}
public static function findOne($sql) {
$query = self::$db->query($sql);
return self::$db->findOne($query);
}
public static function findResult($sql, $row = 0, $field = 0) {
$query = self::$db->query($sql);
return self::$db->findResult($query, $row, $field);
}
public static function insert($table, $arr) {
return self::$db->insert($table, $arr);
}
public static function update($table, $arr, $where) {
return self::$db->update($table, $arr, $where);
}
public static function del($table, $where) {
return self::$db->del($table, $where);
}
}
?>