ClassCMS

SQL语法

ClassCMS内置了常用的数据库操作函数.

insert 插入记录

insert函数返回的数据为插入记录的id值

insert('table','user','username','test');//user表中插入username为test的记录
insert('table','user','username','admin','nickname','管理员');//user表中插入username为admin,nickname为管理员的记录

$user=array();
$user['table']='user';
$user['username']='admin';
$user['nickname']='管理员';
$userid=insert($user);//数组形式插入记录

通过内置函数操作的数据库表会自动加上表名前缀.如不需要加上表名前缀,则使用no_perfix_表名

one 查询一条记录

$user=one('table','user','where',where('id','1'));//返回user表中id=1的记录

$query=array();
$query['table']='user';//表
$query['column']='id,username,nickname';//返回的字段
$query['where']=where('id','1');//查询条件
$user=one($query);//数组形式查询记录

all 查询所有记录

$users=all('table','user','where',where('id>','1'));//查询所有id>1的记录

$query=array();
$query['table']='user';//表
$query['column']='id,username,nickname';//返回的字段
$query['order']='id desc';//排序方式,=rand时随机排序
$query['group']='';//分组查询
$query['offset']='2';//查询记录起始值
$query['limit']='10';//返回数量限定
$query['optimize']=true;//开启查询优化,记录数量多的表,开启优化可以有效提升查询效率
$query['where']=where('id','1');//查询条件
$users=all($query);//数组形式查询所有记录

foreach($users as $user) {//循环输出记录
    echo('id:'.$user['id']);
}

where 查询条件

$user=one('table','user','where','id="1"');//查询id=1的用户

where函数返回类似于字符串'id=1 and username=admin'的sql语句.

where('id','1');//id=1
where('id>','1');//id>1 其它符号 <小于 >=大于等于 <=小于等于 <>不等于
where('id','1','username','admin');//id=1并且username=admin

//模糊搜索
where('username%','admin');//搜索用户名包含admin的记录
where('username%','admin%');//搜索用户名前缀为admin的记录
where('username%',array('ad','min'));//搜索用户名包含ad和min的记录

//数组条件
$userwhere=array();
$userwhere['username']='admin';//username=admin
$userwhere['id']=array(1,2,3);//id=1或2或3,相当于id in(1,2,3)
$userwhere['1;']=array('username%'=>'admin','id<'=>10);//查找username包含admin或者id小于10的记录
$userwhere['2;']=array('title%'=>'ClassCMS','content%'=>'666666');//查找title包含ClassCMS或者内容包含666666的记录
$userwhere['3;']=array(array('title%'=>'class'),array('title%'=>'cms'));//查找title包含class或者包含cms的记录
$userwhere['4;']=array(array('rolehash'=>'admin'),array('rolehash%'=>'admin;%'),array('rolehash%'=>';admin;'),array('rolehash%'=>'%;admin'));//查找角色为admin的账号

//多条件联合
$userwhere['4;']=array('id'=>array(1,2,3));//查找id in 1 2 3的记录
$userwhere['5;']=array('id'=>array(3,4,5));//查找id in 3 4 5的记录
//上述两个条件结合只能查出id=3的记录

//子查询,仅支持in查询
$userwhere['id']=array('table'=>'article','column'=>'uid','where'=>where('datetime>',time()-3600*24));//查询最近24小时添加文章的用户,必须传入table与column
$userwhere['6;']=array('id'=>array('table'=>'article','column'=>'uid','where'=>where('datetime>',time()-3600*24)));//同上

//获取记录
$users=all('table','user','where',where($userwhere));

数组内单行条件之间为or连接,多行条件之间为and连接,数组键名'1;'代表行标识,无任何意义,也可为'英文;'格式,和其它行不重复即可

对于复杂的查询,请拼接条件语句,建议使用escape函数格式化未知的数据,防止sql注入

分页查询

使用all查询所有记录时,使用page函数可以进行分页查询.

page函数参数:

pagename:网址中的页码参数名,

pagesize:每页显示的数量,

page:当前页码(如果不填则自动获取网址中pagename的参数值),

showpages:展示的页码数量

maxpage:最大的页码,限制显示全部的列表,如:只允许显示前100个列表页

$query=array();
$query['table']='user';
$query['page']=page('pagename','page','pagesize',5,'page',1);
$users=all($array);

使用page函数后,可以使用pagelist函数获取分页列表

$pagelist=pagelist();
print_r($pagelist);//分页数组

//pagelist支持以下参数设置
$config=array();
$config['url']='/123/(page)';//自定义当前页面的网址
$config['style_active']='active';//当前页的样式
$config['showpages']=3;//显示的分页数量
$config['channelurl']='/123/';//自定义首页的地址
$pagelist=pagelist($config);

pageinfo函数获取分页信息

$pageinfo=pageinfo();
print_r($pageinfo);//输出文章总数.首页,末页,上一页,下一页的地址等

update 修改记录

update('table','user1','nickname','管理员');//将user1表中的所有记录nickname字段值改为管理员
update('table','user1','where',where('id','1'),'nickname','管理员','username','admin');//将user1表中的id=1的记录的nickname改为管理员,username改为admin

$query=array();
$query['table']='user1';
$query['where']=where('id','1');
$query['points']='{{points+1}}';//points值+1
update($query);

del 删除记录

del('table','user1','where',where('id>','1'));//删除user1表中所有id>1的记录


//删除user表中,money=0并且point<=100的记录
$query=array();
$query['table']='user';
$query['where']['money']=0;
$query['where']['point<=']=100;
del($query);

total 记录总数

total('user');//返回user表中记录总数
total('user',where('id>',1));//返回user表中id>1的记录总数

query 手动查询

query("update user1 set enabled='1';");//手动提交一个sql更新请求

$query=query("select * from ex_user;");//手动提交一个sql查询请求,请求中表名需要加上前缀

$user=fetchone($query);//返回一条查询请求

$users=fetchall($query);//返回多条查询请求

//拼接sql需要注意安全问题,防止被sql注入,可以使用escape函数格式化数据

$username=escape($_GET['username']);
$query=query("select * from ex_user where username='".$username."';");

数据库表操作

//创建表
$table=array('username'=>'varchar(32)','hash'=>'varchar(32)','passwd'=>'varchar(32)','enabled'=>'int(1)','rolehash'=>'text');
C($GLOBALS['C']['DbClass'].':createTable','user2',$table);//创建表时会自动增加id字段
//获取表的字段列表
C($GLOBALS['C']['DbClass'].':getFields','user2');
//删除表
C($GLOBALS['C']['DbClass'].':delTable','user2');

数据库字段操作

//增加字段
C($GLOBALS['C']['DbClass'].':addField','user2','username2','varchar(32)');
//编辑字段
C($GLOBALS['C']['DbClass'].':editField','user2','username2','varchar(64)');
//删除字段
C($GLOBALS['C']['DbClass'].':delField','user2','username2');