CoreMVC  ·下载 ·文档 ·模块 | ·Hello World ·框架结构

core::selects

(CoreMVC 1.0)

core::selects — 根据条件从数据库中查询数据



◎描述
mixed core::selects ( [ mixed $field = null [, mixed $table = null [, mixed $where = null [, mixed $other = null [, mixed $struct = null ] ] ] ] ] )

mixed core::selects ( string $sql , array $param , true [, mixed $other = null [, mixed $struct = null ] ] )

该方法可以根据条件选择数据,可以根据最后一个参数定义返回结果的形式。该方法也提供直接通过SQL语句和参数选择数据。
◎参数
field
字段参数拼装后会跟在SELECT之后,可以是字符串,也可以是数组或二维混合数组。
┌───────────────────────┬───────────────────────┐
│        参数类型           │       SQL语句的结果          │
├───────────────────────┼───────────────────────┤
│null                     │SELECT *                   │
├───────────────────────┼───────────────────────┤
│'column1,column2'               │SELECT column1,column2            │
┝━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━┥
│array('column1','column2')          │SELECT column1,column2            │
├───────────────────────┼───────────────────────┤
│array(null,true,false)            │SELECT NULL,1,0                │
├───────────────────────┼───────────────────────┤
│array(array('DISTINCT'),'column1')      │SELECT DISTINCT column1            │
├───────────────────────┼───────────────────────┤
│array('c1'=>'column1','c2'=>column2')     │SELECT column1 AS c1,column2 AS c2      │
└───────────────────────┴───────────────────────┘
table
表名参数拼装后会跟在FROM之后,可以是字符串,也可以是数组,和字段的格式除默认值以外基本一样。
┌───────────────────────┬───────────────────────┐
│        参数类型           │       SQL语句的结果          │
├───────────────────────┼───────────────────────┤
│null                     │                       │
├───────────────────────┼───────────────────────┤
│'table1,table2'                │FROM table1,table2              │
┝━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━┥
│array('table1','table2')           │FROM table1,table2              │
├───────────────────────┼───────────────────────┤
│array('table1 INNER JOIN table2 USING (id)') │FROM table1 INNER JOIN table2 USING (id)   │
├───────────────────────┼───────────────────────┤
│array('t1'=>'table1','t2'=>'table2')     │FROM table1 AS t1,table2 AS t2        │
└───────────────────────┴───────────────────────┘
where
条件参数拼装后会跟在WHERE之后,可以是字符串,也可以是无限层的混合数组,具体方法如下。
┌───────────────────────┬───────────────────────┬───────────┐
│        参数类型           │       SQL语句的结果          │  占位参数数组值  │
├───────────────────────┼───────────────────────┼───────────┤
│null                     │                       │           │
├───────────────────────┼───────────────────────┼───────────┤
│'c1=1 AND c2>=c3'               │WHERE c1=1 AND c2>=c3             │           │
┝━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━┥
│array('c1=1','c2>=c3')            │WHERE c1=1 AND c2>=c3             │           │
├───────────────────────┼───────────────────────┼───────────┤
│array(array('c1=1','c2>=c3'),'c4=1')     │WHERE (c1=1 OR c2>=c3) AND c4=1        │           │
├───────────────────────┼───────────────────────┼───────────┤
│array(array(array('c1=1','c2>=c3'),'c4=1'))  │WHERE (c1=1 AND c2>=c3 OR c4=1)        │           │
├───────────────────────┼───────────────────────┼───────────┤
│array('c1'=>'s1','c2'=>array('s2','s3'))   │WHERE c1=? AND c2 IN (?,?)          │array('s1','s2','s3') │
├───────────────────────┼───────────────────────┼───────────┤
│array('c1 LIKE ?'=>'%s%')           │WHERE c1 LIKE ?                │array('%s%')     │
├───────────────────────┼───────────────────────┼───────────┤
│array('c1 BETWEEN ? AND ?'=>array(100,200))  │WHERE c1 BETWEEN ? AND ?           │array(100,200)    │
└───────────────────────┴───────────────────────┴───────────┘
other
其他参数拼装后会跟在整个SQL语句之后,可以是字符串,也可以是数组或二维混合数组。该参数可以接受page下标的分页指令。
┌───────────────────────┬───────────────────────┬───────────┐
│        参数类型           │       SQL语句的结果          │  占位参数数组值  │
├───────────────────────┼───────────────────────┼───────────┤
│null                     │                       │           │
├───────────────────────┼───────────────────────┼───────────┤
│'ORDER BY c1 DESC'              │ORDER BY c1 DESC               │           │
┝━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━┥
│array('GROUP BY c1','HAVING COUNT(c2)>=0')  │GROUP BY c1 HAVING COUNT(c2)>=0        │           │
├───────────────────────┼───────────────────────┼───────────┤
│array('ORDER BY'=>'c1','LIMIT'=>array(1,5))  │ORDER BY ?,LIMIT ?,?             │array('c1',1,5)    │
├───────────────────────┼───────────────────────┼───────────┤
│array('page'=>&$page)             │SELECT SQL_CALC_FOUND_ROWS ... LIMIT 20,10  │           │
└───────────────────────┴───────────────────────┴───────────┘
注意:分页符合CPP.PSTC协议标准,SQL语句的结果根据驱动有所不同,上面的表格只显示mysql的合成结果。
上面的例子$page = array ('page'=>3,'size'=>10),没有相应下标的$page = array ('page'=>1,'size'=>1,'count'=>null,'total'=>null);
如果count下标的值不为空值则运行后会得到总条数,而total下标的值运行后会自动计算得到总页数。
struct
这个结构参数定义返回结果的形式。根据需要可以返回值、数组、对象数组或多维数组,返回数组的下标可以是自增也可以是某个字段的值。
┌───────────────────────┬───────────────────────┐
│        参数类型           │       返回的结果           │
├───────────────────────┼───────────────────────┤
│空值=array(null, 'class'=>null)       │对象数组=array(new static|self, ……)    │
├───────────────────────┼───────────────────────┤
│文本=array(null, 'class'=>文本)       │对象数组=array(new 文本, ……)        │
├───────────────────────┼───────────────────────┤
│对象=array(null, 'clone'=>对象)       │对象数组=array(clone 对象, ……)       │
┝━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━┥
│array(……, 空值, ……, 结构)         │$return ...[]...=值             │
├───────────────────────┼───────────────────────┤
│array(……, 整数, ……, 结构)         │$return ...[对象[整数]]...=值        │
├───────────────────────┼───────────────────────┤
│array(……, 文本, ……, 结构)         │$return ...[对象[文本]]...=值        │
┝━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━┥
│array(……, 空值)=array(……, 'class'=>null) │$return ...=new static|self         │
├───────────────────────┼───────────────────────┤
│array(……, 整数)=array(……, 'column'=>整数)│$return ...=数组[整数]            │
├───────────────────────┼───────────────────────┤
│array(……, 文本)=array(……, 'column'=>文本)│$return ...=数组[文本]            │
├───────────────────────┼───────────────────────┤
│array(……, 对象)=array(……, 'clone'=>对象) │$return ...=clone 对象            │
├───────────────────────┼───────────────────────┤
│array(……, 数组)=array(……, 'array'=>数组) │$return ...=数组               │
┝━━━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━━━┥
│array(……, 'assoc'=>null)          │$return ...=array('属性'=>'值', ……)    │
├───────────────────────┼───────────────────────┤
│array(……, 'both'=>null)           │$return ...=array('属性'=>'值','值', ……)  │
├───────────────────────┼───────────────────────┤
│array(……, 'num'=>null)           │$return ...=array('值', ……)        │
├───────────────────────┼───────────────────────┤
│array(……, 'array'=>数组)          │$return ...=数组               │
├───────────────────────┼───────────────────────┤
│array(……, 'column'=>整数)          │$return ...=数组[整数]            │
├───────────────────────┼───────────────────────┤
│array(……, 'column'=>文本)          │$return ...=数组[文本]            │
├───────────────────────┼───────────────────────┤
│array(……, 'class'=>空值)          │$return ...=new static|self         │
├───────────────────────┼───────────────────────┤
│array(……, 'class'=>文本)          │$return ...=new 文本|static|self       │
├───────────────────────┼───────────────────────┤
│array(……, 'class|classtype'=>文本)     │$return ...=new 首个字段|文本|static|self  │
├───────────────────────┼───────────────────────┤
│array(……, 'clone'=>对象)          │$return ...=clone 对象            │
└───────────────────────┴───────────────────────┘
注1:空值专指null或空串,整数专指非负数整,文本专指非空字符串,static|self表示在PHP 5.3下为静态延时绑定类名,在PHP 5.2下为当前核心模块类名。
注2:最后一个值的下标可以用粘附“|table=文本”来指定表名,如:'class|table=test'=>null表示如果表名参数为空值的话则使用该表名加前缀。未粘附表名的则取类名为作粘附表名。
sql
查询的SQL语句,支持问号形式的占位符。
param
配合SQL语句和占位符对应的参数数组。
◎返回值
根据结构参数返回相应的值,失败时返回false。
◎修改日志
版本	描述
1.1 结构参数最后一个值的下标不作为字段名,而变成了标识类型。从该版本起支持SQL语句和参数的写法。
◎例子
前四个参数组合使用

《test.php》
<?php
require_once 'core.php';

core::selects (null,'user'); //SELECT * FROM user,返回全部记录的core对象数组

core::selects ('id','name','user',array('status'=>1)); //SELECT id,name FROM user WHERE status=1,返回符合条件的记录的core对象数组

core::selects (null,'user',null,'ORDER BY id DESC'); //SELECT * FROM user ORDER BY id DESC,返回排过序的全部记录的core对象数组

core::selects ('user.name,task.task_id','user LEFT OUTER JOIN task USING (user_id)'); //SELECT user.name,task.task_id FROM user LEFT OUTER JOIN task USING (user_id),返回符合条件的记录的core对象数组

core::selects ('SELECT * FROM user WHERE status=?',array(1),true); //SELECT * FROM user WHERE status=1,返回符合条件的记录的core对象数组

$page = array ('page'=>3'size'=>10);
core::selects (null,'user',null,array('ORDER BY id','page'=>&$page)); //SELECT SQL_CALC_FOUND_ROWS * FROM user ORDER BY id,返回排过序的全部记录的core对象数组
var_dump($page); //此时$page有count和total两个值,直接传给符合CPP.PSTC分页模板即可。
?>

最后一个参数使用方法

《test.php》
<?php
require_once 'core.php';

core::selects (null,'user',null,null,array('class'=>'core')); //SELECT * FROM user,返回单条记录的core对象

core::selects (null,'user',null,null,array('user_id','class'=>'core')); //SELECT * FROM user,返回以user_id为下标的全部记录的core对象数组

core::selects (null,'user',null,null,array('user_id','column'=>'name')); //SELECT * FROM user,返回以user_id为下标的name为值的数组

core::selects ('COUNT(*)','user',null,null,array('column'=>'COUNT(*)')); //SELECT COUNT(*) FROM user,返回单个值

core::selects (null,null,null,null,array(null,'class|table=user'=>'sample')); //SELECT * FROM user,返回全部记录的sample对象数组
?>



CoreMVC是PHP的一款小巧精致的MVC框架,遵循New BSD协议发布。