PHP实现连接数据库4
上次我们说到php对数据库的删除操作,接下来我们就简单的说下数据库的查询,首要一条完整的查询语句是
SELECT [字段名] from [表名] where… group… order… limit… 这是一条简单但较为完整的一条查询语句同样我们需要一个select方法代码如下
public function select(array $data){//查询数据的方法
// select 查询
// SELECT 字段名 FROM 表名 where...group...order...limit
// 因为传入数组的值中有时会传入一个主键所以我们要获取到主键定义一个获取主键的方法
$this->operate="select";//定义一个字符串记录当前的操作
$key='';//定义查询的字段值
if($data[0]=='*'){//查看用户是否查询所有值如果时就查询所有字段因此我们要获取到这个表的所有字段名
$this->field();//调用field方法获取到所有字段
$key=$this->fields;//给key赋值
$data=explode(",",$this->fields);//保存字段数组
}
else{
foreach ($data as $k){//foreach组装需要查询的数据
$key=$key.",".$k;//组装需要查询的字段
}
}
if(!empty($this->where)){//判断where是否为空,如果不为空则给where赋值下同
$where=" WHERE ".$this->where;
}
if(!empty($this->group)){
$group=" GROUP BY ".$this->group;
}
if(!empty($this->order)){
$order=" ORDER BY ".$this->order;
}
if(!empty($this->limit)){
$limit=" LIMIT ".$this->limit;
}
$key=ltrim($key,",");//去除左边函数
$sql="SELECT {$key} FROM {$this->tabname}". " {$where}"." {$group}"." {$order}"." {$limit}"; //组装sql语句这里注意where前面记得加个空格
$this->sql=$sql;
return $this->runsql($sql,$this->operate,$data);//$data把需要查询的字段传递给runsql调用runsql方法执行sql语句
}
接下来我们看下field方法
private function field(){//获取该表的字段名还有主键
$sql="DESC $this->tabname";//desc 表名
$this->operate='desc';//记录当前操作
$data='';
$this->runsql($sql,$this->operate,$data);//调用runsql执行sql语句
foreach ($this->fie as $k=>$v){//foreach获取到字段名
if($v=='PRI'){//记录主键
$this->key_field=$k;
}
$this->fields=$this->fields.$k.",";//组装字段
}
$this->fields=rtrim($this->fields,",");//除去多余,
}
接下来还有个where等方法,这里采用的是__call的魔术方法之前也有讲过
public function __call($funname,$args){//一个魔术方法当调用此类中不存在的方法时执行此方法可用来屏蔽错误
// 可采用这种方法来判断用户输入的where...group...order...limit...
// $funname为该方法不存在的方法名,$args为该方法传入的参数
if($funname=="where"){//where子句
$this->where=$args[0]?$args[0]:'';//如果where有值得话给$where赋值如果没有赋值为空
}
if($funname=='group'){
$this->group=$args[0]?$args[0]:'';
}
if($funname=='order'){
$this->order=$args[0]?$args[0]:'';
}
if($funname=='limit'){
$this->limit=$args[0]?$args[0]:'';
}
return $this;
}
最后就只有一个runsql的方法没讲了,代码如下
private function runsql($sql,$operate,$data){//执行sql语句注意插入删除是不会有返回受影响的条数的$operate记录您当前的操作
// $row=$this->conn->num_rows($result);//返回查询出的条数
// print_r($data);
$result=mysqli_query($this->conn,$sql);//执行sql语句并返回结果集或false
if($operate=='select'){//当前执行select操作需要返回结果集
if (mysqli_num_rows($result)>0) {
// 输出数据
while($row = mysqli_fetch_assoc($result)) {//遍历需要查询的字段
echo "<tr>";
foreach ($data as $k=>$v) {
echo "<td>$row[$v]</td>";
}
echo "<td><button class='del'>删除</button></td></tr><br>";
}
} else {
echo "0 结果";
}
} }
那么现在就让我们来尝试下查询的操作
<?php
include 'daconfig.php';//引入配置文件
include 'MySQL.php';//映入mysql文件
$mysql=new model();//new一个对象
$mysql->construct("student");//传递表名
// //传入数组显示查询的内容
$arr=array('sid','sname','sclass','ssex','ssubject','sdept','sphon','sbirth','identity_no');
//需要查询的字段
$a="sid!='1610519053'";//where条件
$mysql->where($a);
$b="sclass";//分组条件
$mysql->group($b);//按照班级分组
$mysql->order('sid');//按照学号分组
$mysql->limit('5');//显示条数
$mysql->select($arr);//查询
?>
![]()
OK啦!!!