对于小白来说,每次调用MySQL时都要先老老实实的通过mysql_connect()连接数据库,然后写上十几行的代码连库连表,然后又写一大段insert、delete、update....等进行增删改查。写一次两次还好,一个项目下来要写上几十上百遍那将会是非常繁琐的事情,同时代码量也会增加不少,还浪费时间。
那么如何即简便又能达到一样的效果呢,答案当然是通过封装函数,在通过每次需要连接数据库,对表进行增删改查时直接调用封装好的函数就可以完成,而不用写上一长串的代码,同时,要是每次操作数据库时,服务器能够自动给我们捕捉并记录我们的数据并以日志的形式生成日志文件,那么在检查Bug的时候是不是方便了很多.简单就是快乐。
下面小编同大家分享PHP调用MySQL的各种封装函数。
<?php
/**
* mysql.php mysql系列操作函数
* @author PHP凌晨四点半
*/
/**
* 连接数据库-mysql_connect()
*
* @return resource 连接成功,返回连接数据库的资源
*/
function mConn(){
static $conn = null;
if($conn === null){
$config = require (ROOT . '/lib/config.php');
$conn = mysql_connect($config['host'],$config['user'],$config['pwd']);
mysql_query('use '.$config['db'],$conn);
mysql_query('set names '.$config['charset'],$conn);
}
return $conn;
}
/**
*
* 查询数据--mysql_query;
* @return mixed resource/bool;
*/
function mQuery($sql){
$rs = mysql_query($sql,mConn());
if($rs){
mLog($sql);
}else{
mLog($sql. "\n" . mysql_error());
}
return $rs;
}
/**
*
* log日志记录功能
* @parm str $str 待记录的字符串
*/
function mLog($str){
date_default_timezone_set('PRC');
$filename = ROOT . '/log/' . date('Ymd') . '.txt';
$log = "---------------------------------------------------------------\n".date('Y/m/d H:i:s') . "\n" . $str . "\n" ."---------------------------------------------------------------\n\n";
return file_put_contents($filename,$log,FILE_APPEND);
}
/**
* select查询返回二维数据,用while循环输出
*
* @param str $sql select 待查询的sql语句;
* @return mixed select 查询成功,返回二维数组,失败返回false
*/
function mGetAll($sql) {
$rs = mQuery($sql);
if(!$rs) {
return false;
}
$data = array();
while($row = mysql_fetch_assoc($rs)) {
$data[] = $row;
}
return $data;
}
/*
$sql = "select * from cat";
print_r(mGetAll($sql));*/
/**
*
* select 取出一行数据;
* @param str sql 待查询的sql语句;
* @return arr/false 查询成功返回一个一维数组;
*/
function mGetRow($sql){
$res = mQuery($sql);
if(!$res){
return false;
}else{
return mysql_fetch_assoc($res);
}
}
/*$sql = "select * from cat where cat_id = 1";
print_r(mGetRow($sql));*/
/**
* select 查询返回一个结果
*
* @param str $sql 待查询的select语句
* @return mixed 成功,返回结果,失败返回false
*/
function mGetOne($sql) {
$rs = mQuery($sql);
if(!$rs) {
return false;
}
return mysql_fetch_row($rs)[0];
}
/**
*
* 返回符合查询结果的个数
* @param str $sql 待查询的sql语句;
*@return 成功,返回查询符合结果的个数值,失败,返回false;
*
*/
function mGetNum($sql){
$result = mQuery($sql);
if(!$result){
return false;
}
return mysql_fetch_row($result)[0];
}
/*$sql = "select count(*) from cat where cat_id = 1";
echo mGetNum($sql);*/
/**
*
*
* @param str $table 表名
* @param str $data 接收到的一维数组数据
* @param str $act 动作默认为'insert'
* @param str $where 防止update更改时少加where条件;
* @return bool insert或者update 插入成功或失败;
*/
function mExec($table,$data,$act = 'insert',$where=0){
if($act == 'insert'){
$sql = "insert into $table (";
$sql .= implode(',', array_keys($data)) . ") values ('";
$sql .= implode("','", array_values($data)) . "')";
return mQuery($sql);
}else if($act == 'update'){
$sql = "update $table set ";
foreach($data as $k=>$v){
$sql .= $k ."='" .$v ."',";
}
$sql = rtrim($sql,',') ." where ". $where;
return mQuery($sql);
}
}
代码可以直接运用于现实开发过程中,当作素材,不懂的可以问小编,大家共同进步,互相学习.
代码多少可能有一点Bug,欢迎大家指出.谢谢.