封装一个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被废弃这样的问题
- 封装的时候很多细节没有处理,仅仅简单的封装了一下,体现一下面向对象封装的赶脚,面向对象写代码,就是写的时候很难受,但是用起来,却很舒服