弱鸡养成第六天(2020.10.23)-封装部分数据库操作函数

本文介绍了在PHP中遇到的mysqli_multi_query连续执行的坑,分享了解决方案及数据库操作函数的封装。同时,文章提及了Git的使用,包括下载、基本操作指令,并提到了如何修改已提交注释的方法。
摘要由CSDN通过智能技术生成

程序员节快乐!在这里插入图片描述

奇怪的bug

在测试我写完的操作数据库的函数时,再一次遇到了bug:
PHP mysqli_multi_query 连续执行的坑,记住这个特性吧,改了一个小时的bug也没改出来问题,人都傻了。看博客
https://blog.csdn.net/weixin_34302798/article/details/92033851

代码

样式部分:

<?php 
	//设置页面编码为utf-8
	header('Content-type:text/html;charset=utf-8');
	
	//数据库常量
	define('DB_HOST','localhost');
	define('DB_USER','root');
	define('DB_PASSWORD','');
	define('DB_DATABASE','blogbytcy');
	define('DB_PORT',3306);
?>

函数封装部分:

<?php 


//@ 连接数据库
//@ 参数均为同目录下config_inc.php文件定义好的常量
//@ 返回link对象
function Mysql_inc_connect($host=DB_HOST,$user=DB_USER,$password=DB_PASSWORD,$database=DB_DATABASE,$port=DB_PORT){
	$link=@mysqli_connect($host, $user, $password, $database, $port);
	if(mysqli_connect_errno()  ){
		echo '连接mysql失败!';
		exit(mysqli_connect_error()  );
	}
	mysqli_set_charset($link,'utf8');
	echo '连接mysql成功!';
	return $link;
}

//@ 执行一条sql语句
//@ p1:link对象,对象
//@ p2:sql语句,字符串
//@ 返回结果集result,执行失败则返回空
function Mysql_inc_execute($link,$query){
	$result=mysqli_query($link,$query);
	if(mysqli_errno($link)  ){
		echo '执行语句失败!';
		exit(mysqli_error($link)  );
	}
	echo '执行语句成功!';
	return $result;
}

//@ 执行一条sql语句
//@ p1:link对象,对象
//@ p2:sql语句,字符串
//@ 返回bool值,执行成功返回true,否则返回false
function Mysql_inc_execute_bool($link,$query){
	$bool=mysqli_real_query($link,$query);
	if(mysqli_errno($link)  ){
		echo 'cao';
		echo '执行语句失败!';
		exit(mysqli_error($link)  );
	}
	echo '执行语句成功!';
	return $bool;
}

// @一次性执行多条SQL语句
// p1:link对象,对象
// p2:多条语句,字符串数组
// p3:用于引用返回的错误信息,引用型字符串
// 执行成功返回结果集数组,否则返回bool值false
function Mysql_inc_execute_multi($link,$arr_sqls,&$error){
	$sqls=implode(';',$arr_sqls).';';
	
	var_dump($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)){
			echo '执行语句成功';
			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;
	}
	
}

//@ 获取指定表的记录数
//@ p1:link对象,对象
//@ p2:表名,string
//@ 返回-1代表查询失败,否则返回表的记录数(字符串型)
function Mysql_inc_get_line_num($link,$list_name){
	$query='select count(*) from ';
	$query.=$list_name;//设置好查询语句
	$result=Mysql_inc_execute($link,$query);//执行查询语句
	$count=mysqli_fetch_row($result);//获取结果集
	return $count[0];//count数组的仅有的值就是表的行数
}

// 关闭与数据库的连接
// @p1:link对象,对象
// 无返回值
function Mysql_inc_close_connect($link){
	mysqli_close($link);
}
?>

测试部分:

<?php 
	//本文件的功能:

	// config_inc.php 是所有php文件都要导入的基本配置文件
	// mysql_inc.php 是实现写好的数据库操作文件,里面有封装好的函数
	include_once '../inc/config_inc.php';
	include_once '../inc/mysql_inc.php';

	echo "<pre>";
	
	
	$link=Mysql_inc_connect();
	echo '1<hr>';
	
	$query='select * from father_module';
	
	/*var_dump(Mysql_inc_execute($link,$query) );
	echo '2<hr>';
	
	var_dump(Mysql_inc_execute_bool($link,$query) );
	echo '3<hr>';*/
	//可恶,mysqli_query函数无法连续执行,所有这几个样例只能分批次测试
	//这个bug的解释见https://blog.csdn.net/weixin_34302798/article/details/92033851
	$query_arr[]=$query;
	$query_arr[]=$query;
	if(!Mysql_inc_execute_multi($link,$query_arr,$error) ){
		echo $error;
	}
	echo '4<hr>';
	

	
	var_dump(Mysql_inc_get_line_num($link,'father_module') );
	echo '5<hr>';
	
	var_dump(Mysql_inc_close_connect($link));
	echo '6<hr>';
?>

github以及git操作指令

下载地址:https://pan.baidu.com/s/1wY4L8HHK38RInfGXtb2GGA 提取码: ug1v
配合视频学习更佳:https://www.bilibili.com/video/BV1pW411A7a5
修改已经commit的注释的方法:https://www.jianshu.com/p/098d85a58bf1

上传到github

今天完成的部分已上传到https://github.com/1281042827/209Big/commits/master,git指令用的还是不太熟练,有空再学学linus吧!

好好学习,天天向上!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值