前期我们数据访问时,需要在每个页面都新建一次数据库连接,这样做的缺陷有
1.数据访问的页面很多时我们需要在每个页面新建连接
2.当数据库发生变化时(比如移至其他PC办公)时,需要修改数据库的连接方式,比如密码,这样后期维护的工作量会非常大。
所以我们可以引入面向对象的思想,将数据访问方法封装成一个类,然后每个使用数据库的页面就加载一下这个类,这样以后如果数据库发生改动,就可以在类中修改,有礼于后期维护和数据库功能扩展。
这里我们先定义一个DABA类(类的命名遵循驼峰命名法,即首字母大写,第一个首字母也大写 例如 DBDA.class.php)
1 <?php 2 class DBDA 3 { 4 public $host = "localhost"; //将连接的四要素定义为成员属性 5 public $uid = "root"; 6 public $pwd = "123"; 7 public $dbname = "mydb"; 8 9 //执行SQL语句返回相应的结果 10 //$sql 要执行的SQL语句 11 //$type 代表SQL语句的类型,0代表增删改 1代表查询 12 function query($sql,$type=1) //方法的命名也遵循驼峰命名法,第一个单词的首字母小写,往后的每个单词的首字母大写,和类命名有一点点区别 13 { 14 $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); 15 16 $result = $db->query($sql); 17 18 if($type) 19 { 20 //如果是查询,返回数据 21 return $result->fetch_all();// 这里抓取了all,会返回一个二维数组,也可以抓取row(),返回的是一维数组 22 } 23 else 24 { 25 //如果是增删改,返回true或false 26 return $result; 27 } 28 } 29 } 30 ?>
接下来就写我们的访问页面(主要看php代码部分 的变化)
1 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 2 <title>无标题文档</title> 3 </head> 4 5 <body> 6 <table cellpadding="0" cellspacing="0" width="100%" border="1"> 7 <tr> 8 <th>学号</th> 9 <th>姓名</th> 10 <th>性别</th> 11 <th>生日</th> 12 <th>班级</th> 13 <th>操作</th> 14 15 </tr> 16 <?php 17 require "DBDA.class.php"; //加载我们定义的类 18 $db=new DBDA(); //构建对象 19 $sql="select * from student"; //写入SQL语句 20 $attr=$db->query($sql,1);//对象调用了类里面的query方法,里面的参数$sql和$type ,其中$type不写也会默认为1(true) 21 //注意这里的$db->query($sql)不再是一个结果集了,因为在类的query方法里已经执行了fetch抓取,结果是二维数组 22foreach($attr as $v)
{ /遍历这个数组的值 23 echo "<tr align='center'> 24 <td>{$v[0]}</td> 25 <td>{$v[1]}</td> 26 <td>{$v[2]}</td> 27 <td>{$v[3]}</td> 28 <td>{$v[4]}</td> 29 <td><a href='ttttgai'>修改</a></td> 30 </tr>"; 31 }
看看效果
运行成功,这样我们就不用每个页面都写入访问连接了,只需要加载一下这个类文件,修改也方便,确实方便了很多(毕竟也是面向对象思想的优势)。