3、数据库操作函数

文件位置:inc/mysql.inc.php

void单词本意: 空的、不需要参数

本节难点:一次执行多条sql的编写。

 

1)连接数据库

核心函数:mysqli_connect()

function connect($host=DB_HOST,$user=DB_USER,$pwd=DB_PASSWORD,$db=DB_DATABASE,$port=DB_PORT){
//建立一个新连接
$link = @mysqli_connect($host,$user,$pwd,$db,$port);
var_dump($link);exit;
//如果返回值不为0 就结束代码 输出错误描述
if (mysqli_connect_errno()){
exit(mysqli_connect_error());
}
//设置默认字符集
mysqli_set_charset($link,'utf8');
return $link;//返回连接对象
}
用到的函数:
1、mysqli_connect(主机名,用户名,密码,数据库名,端口号);打开到MySQL服务器的新连接 返回值:返回一个表示与MySQL服务器的连接的对象
2、mysqli_connect_errno(void);返回最后一次连接数据库的错误代码 0表示没有错误
3、mysqli_connect_error(void);返回上一个连接错误的字符串说明

 

2)执行一条语句 返回结果集或布尔值

核心函数:mysqli_query()

function execute($link,$sql){
$result
= mysqli_query($link,$sql); //如果有错打印错误信息 if (mysqli_errno($link)) { exit(mysqli_error($link)); } return $result; }

用到的函数:
1、mysqli_query($link,$sql);对数据库执行一次查询
返回值:失败返回false,成功执行select,show,describe或explain会返回一个mysqli_result 对象,其他查询则返回TRUE。 
  describe:查询表的结构
explain:查看SQL的执行计划

2、mysqli_errno($link);最近一次函数调用所产生的错误代码 返回值:0表示没有错误

3、mysql_error($link);最近一次错误代码的描述,类型是字符串

 

 3)执行一条语句 只返回布尔值

function execute_bool($link,$sql){
$bool = mysqli_real_query($link,$sql);
if (mysqli_errno($link)){
exit(mysqli_error($link));
}
return $bool;
}
核心函数:
mysqli_real_query($link,$sql);执行一个mysql查询 返回值:布尔类型

4)获取记录数

核心逻辑:sql语句必须带统计函数
统计函数返回的结果集只有一行,我们取出来这一行就可以了

  select count(*) from bbs_category;
  +----------+
  | count(*) |
  +----------+
  | 3 |
  +----------+
  1 row in set (0.00 sec)

------------------------------------------------------------

function num($link,$sql_count){ $result
= execute($link,$sql_count); $num = mysqli_fetch_row($result);//以一个枚举数组方式返回一行结果 return $num[0]; }

------------------------------------------------------------

另一种方式:sql语句不使用统计函数
$sql = "select * from bbs_category;
$result = mysqli_query($link,$sql);
$res = mysqli_num_rows($result);//获取结果中行的数量 返回值 int
var_dump($res); 

5)数据入库之前 转义函数

function escape($link,$data){
    //1 如果是字符串就转义一下返回
    if (is_string($data)){
        return mysqli_real_escape_string($link,$data);//函数返回转义后的字符串
    }
    //2 用递归的方式遍历数组
    if (is_array($data)){
        foreach ($data as $k=>$v){
            $data[$k] = escape($link,$v);
        }
    }
    return $data;
}
核心函数:
mysqli_real_escape_string($link,$str);根据当前连接的字符集,对于 SQL 语句中的特殊字符进行转义

6)关闭连接

function close($link){
    mysqli_close($link);
}
$link = connect();
clos($link);
在函数里面关闭了$link,函数外面这个$link有没有受到影响?
答案是:外面这个也关闭了。

为什么可以关闭成功?
当对象作为函数的参数值,对象直接把自己本身传递过去了,而不是复制一份传递给函数,就像引用传参一样。

----------------------------------------------------------------------------------
//按值传参
function demo($i){
echo $i = $i+10;
}
$a = 5;
demo($a);//输出15 函数里面的$a已经是15了
echo $a;//输出5 函数外面的$a还是5

//引用传参
$error = '';
function say(&$error){
echo $error = '我是引用传参';
}
say($error);//输出了 我是引用传参
echo $error;//也输出了 我是引用传参 函数外的变量$error已经被改变

-------------------------------------------------------------------------------------------------------------------------------

7)执行多条sql语句

核心函数:
mysqli_multi_query 执行一个 SQL 语句,或者多个使用分号分隔的 SQL 语句
要获得执行结果中的第一个结果集,请使用 mysqli_use_result() 或 mysqli_store_result() 函数。

要读取后续的结果集, 请使用 mysqli_more_results() 和 mysqli_next_result() 函数。

执行多条语句得到了多个结果集

函数实现

function execute_multi($link,$arr_sqls,&$error){
$sqls=implode(';',$arr_sqls).';';
if(mysqli_multi_query($link,$sqls)){
$data=array();
$i=0;//计数
do {
if($result=mysqli_store_result($link)){
$data[$i]=mysqli_fetch_all($result);
mysqli_free_result($result);
}else{
$data[$i]=null;
}
$i++;
if(!mysqli_more_results($link)) break;
}while (mysqli_next_result($link));
if($i==count($arr_sqls)){
return $data;
}else{
$error="sql语句执行失败:<br />&nbsp;数组下标为{$i}的语句:{$arr_sqls[$i]}执行错误<br />&nbsp;错误原因:".mysqli_error($link);
return false;
}
}else{
$error='执行失败!请检查首条语句是否正确!<br />可能的错误原因:'.mysqli_error($link);
return false;
}
}

参数说明和调用示范

参数说明
$link:连接
$arr_sqls:数组形式的多条sql语句
$error:传入一个变量,里面会存储语句执行的错误信息

使用示范: $arr_sqls
=array( 'select * from sfk_father_module', 'select * from sfk_father_module', 'select * from sfk_father_module', 'select * from sfk_father_module' ); var_dump(execute_multi($link, $arr_sqls,$error)); echo $error;

 

posted @ 2020-12-10 11:18  棉花糖88  阅读(233)  评论(0)    收藏  举报