1)第一种方法
- <?PHP
- /*
- * 类功能: 实现数据库的连贯查询操作
- */
- class mysql_query{
- var $tbl='user';// 要操作的表名
- var $limit=";// 存储 limit 语句的变量
- var $order=";// 存储 order 语句的变量
- var $sql=";// 存储完整 sql 语句的变量
- function limit($str) {
- $this->limit='limit'.$str;// 设置 limit 语句
- // 返回对类自身的引用, 这里不能使用 return new mysql_qery(),
- // 因为这样相当于又创建了类的一个新实例, 那么上一步设置的 limit 语句, 在新实例中是不存在的
- // 大家可以自己实验
- // 因此要返回 $this, 即当前类的实例
- return $this;
- }
- function order($str) {
- $this->order='order by'.$str;// 设置 order 语句
- return $this;// 返回对类自身的引用
- }
- function findall() {
- $this->sql='select * from'.$this->tbl.''.$this->order.' '.$this->limit;// 拼接 sql 语句
- echo $this->sql;// 输出, 由于是示例, 所以没有写查询数据库的代码
- }
- }
- //Example
- $mysqlDb=new mysql_query();
- $result = $mysqlDb->limit('0,10′)->order('id desc')->findall();
- print_r($result);
2)PHP __call()方法实现数据库连贯操作
- <?PHP
- namespace Config;
- // 使用__call()方法来实现数据库连贯操作
- // 申明一个 Db 类 (数据库操作类) 的简单操作模型
- class LinkAction
- {
- private $sql = array(
- "field" => "",
- "where" => "",
- "order" => "",
- "limit" => "",
- "group" => "",
- "having" => "",
- );
- // 连贯操作调用 field() where() order() limit() group() having()方法, 组合 sql 语句
- function __call($methodName,$args)
- {
- // 将第一个参数(代表不存在方法的方法名称), 全部转成小写方式, 获取方法名称
- $methodName = strtolower($methodName);
- // 如果调用的方法名和成员属性数组 $sql 下标对应上, 则将第二个参数给数组中下标对应的元素
- if(array_key_exists($methodName,$this->sql)){
- $this->sql[$methodName] = $args[0];
- }else{
- echo '调用类'.get_class($this).'中的方法'.$methodName.'()不存在';
- }
- // 返回自己对象, 则可以继续调用本对象中的方法, 形成连贯操作
- return $this;
- }
- // 输出连贯操作后组合的一个 sql 语句, 是连贯操作最后的一个方法
- function select()
- {
- echo "SELECT {$this->sql['field']} FROM user {$this->sql['where']} {$this->sql['order']} {$this->sql['limit']} {$this->sql['group']} {$this->sql['having']}";
- }
- }
- $db = new LinkAction();
- // 连贯操作
- $db->field('sex, count(sex)')
- ->where('where sex in (" 男 "," 女 ")')
- ->group('group by sex')
- ->having('having avg(age)> 25')
- ->select();
来源: http://www.bubuko.com/infodetail-3457065.html