4:封装一个Mysql类

封装一个MySQL类

目的:

  • 连接数据库
  • 发送查询
  • select型,返回查询数据
  • 关闭数据库连接

链接数据库:

- 连接数据库需要参数,例如用户名,密码,端口号这些
- 参数怎么传递,怎么保存,怎么管理,如果是项目中,一定是使用配置文件,通过读取配置文件中书写的这些参数,传递给数据库类
- 本次练习,不使用配置文件,直接通过构造函数传递参数

代码:

<?php 
/**
 * mysql类
 * 环境:wamp
 * PHP版本:7.1.16
 * MySQL版本:5.7.21
 */
class Mysql{
	private $host = 'localhost';
	private $name = 'root';
	private $pwd = '123456';
	private $db_name = 'zhenzhentest';
	
	//保存数据库连接资源
	private $coun = null;
	function __construct(){
		//一般来说,这些数据库地址,数据库账户名,密码等,都是有一个配置文件的,而这些应该是mysql类中去读取构造函数,然后赋值
		//连接数据库
		$this->coun = new mysqli($this->host,$this->name,$this->pwd,$this->db_name);

		//连接之后,设置字符集
		$this->query('utf8');
	}

	//负责发送query查询
	public function query($sql){
		return $this->coun->query($sql);
	}

	//负责切换数据库,当项目比较大时,数据库不止一个
	public function switchDB($name){
		$this->query('use ' . $name);
	}

	//负责设置字符集
	public function setChar($char){
		$this->query('set names ' . $char);
	}

	//获取多行多列的select结果
	public function getResult($data){
		$arr = array();
		if (!$data) {
			return false;
		}
		while ($row = mysqli_fetch_assoc($data)) {
			$arr[] = $row;
		}
		return $arr;
	}

	//获取一行select结果
	public function getRow($data){
		if (!$data) {
			return false;
		}
		return mysqli_fetch_assoc($data);
	}

	//获取一个单个的值
	public function getOne($data){
		if (!$data) {
			return false;
		}
		$row = mysqli_fetch_row($data);
		return $row[0];
	}

	//给一个数组,数组键名为列,数组值为列值
	public function insertZhanghu($arr){
		$keys = '';
		$values = '';
		foreach ($arr as $key => $value) {
			$keys .= $key . ',';
			$values .= '"' . $value . '"' . ',';
		}
		$keys = substr($keys,0,(strlen($keys) - 1));
		$values = substr($values,0,(strlen($values) - 1));

		$sql = "insert into zhanghu ( $keys ) values ( $values );";
		var_dump($sql);
		if (!$this->query($sql)) {
			echo '插入失败';
		}else{
			echo '插入成功';
		}
		
	}

	//关闭数据库
	public function closeDB(){
		$this->coun->close();
	}
}

//实例化mysql类
$mysql1 = new Mysql();

//查询
$rs1 = $mysql1->getResult($mysql1->query('select * from zhanghu'));
if (!$rs1) {
	echo '查询失败<br/>';
}else{
	var_dump($rs1);
}
$rs2 = $mysql1->getRow($mysql1->query('select * from zhanghu'));
if (!$rs2) {
	echo '查询失败<br/>';
}else{
	var_dump($rs2);
}
$rs3 = $mysql1->getOne($mysql1->query('select * from zhanghu'));
if (!$rs3) {
	echo '查询失败<br/>';
}else{
	var_dump($rs3);
}

//切换数据库
$mysql1->switchDB('yiibaidb');

//查询
$rs4 = $mysql1->getResult($mysql1->query('select * from items'));
if (!$rs4) {
	echo '查询失败<br/>';
}else{
	var_dump($rs4);
}

$mysql1->switchDB('zhenzhentest');

// if ($mysql1->query('insert into zhanghu values (5,"振振",900000000)')) {
// 	echo 'query成功<br>';
// }else{
// 	echo 'query失败<br>';
// }
echo '<hr/>';

$mysql1->insertZhanghu(['name'=>10]);


//关闭数据库
$mysql1->closeDB();
?>

总结:

  • PHP版本是7.x的,所以有很多问题,视屏教程中很多方法不能用,类似:mysql_connect被废弃这样的问题
  • 封装的时候很多细节没有处理,仅仅简单的封装了一下,体现一下面向对象封装的赶脚,面向对象写代码,就是写的时候很难受,但是用起来,却很舒服

猜你喜欢

转载自blog.csdn.net/a2522086223/article/details/83113788