Chinaunix首页 | 论坛 | 博客
  • 博客访问: 607096
  • 博文数量: 129
  • 博客积分: 8026
  • 博客等级: 中将
  • 技术积分: 1300
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-21 14:39
文章分类

全部博文(129)

文章存档

2011年(1)

2007年(26)

2006年(102)

我的朋友

分类:

2006-07-09 03:02:45

使用pear::DB_QueryTool也有一段时间了,用这个东西一直感觉不错,它可以使你以最简单方便的构建你所需要的各种SQL语句.,以下是它常用的一些方法:
 
查询类
get($id,$column) //返回主键等于$id的记录,$column用来指定要返回的字段
getMultiple($ids,$column) //类似get(),但可用数组
getAll()//返回全部结果
getCount()//符合条件的记录数
 
更新
add($data) //加入新记录,$data为字段名=>值的数组
addMultiple($data) //一次加入多条记录,$data为二维数组
update($data) //更新记录,$data为要更新的字段及新值的数组
save($data) //如果$data中存在主键,则调用update,否则调用add()
 
以上都可另外指定where条件,见setWhere和addWhere
 
删除
remove($data,$whereCol) //以$whereCol = $data为条件删除,可只用字段名键值对的$data参数,这时第二参数会被忽略
removeAll();//清空表
removeMultiple($ids,$colName)//以数组传递要删除的id
 
其它设定
setLimit($from=0,$count=0);
setOrder($orderCondition,$desc=false);
setHaving($havingCondition)
setGroup($group);
setWhere($whereCondition);
addWhere($whereCondition,$condition = 'AND');//加入一个条件,用and连接之前的
addWhereSearch($column,$stringToSearch,$condition); //构造where $column like %$stringToSearch%条件
setSelect($column)//要返回的字段
setLeftJoin($table,$where) //用$where构造左联接
setRightJoin($table,$where)//右联
 
 
一些技巧:
可以使用变量 _lastQuery 返回最后执行的sql语句,getQueryString()方法只返回最后执行的select类语句
用execute()方法可以执行自已手动构建的sql语句,或者直接用$db -> xx,在这里$db一般为pear::DB对象,在一个继承自DB_QueryTool的类中,可以直接调用$db对象的方法
 
这两天碰到的不爽:
要想构造一个类似
update table set times=times+1,d=now(),name="abc" where id=2
的查询,须将raw参数设为true(默认为false):setOption('raw',true);
但设为true后,所有字段都不会被"引用",需要手工处理,如:
$data['id'] = 2;
$data['times'] = "times+1";
$data['d'] = "now()";
$data['name'] = $db->quoteSmart("abc"); //使用$db对象的方法,当然,实际应用时,abc可能直接来自客户端的post
update($data);
 
一个极其郁闷的不爽:
做了很多功夫,发现都达不到以下目的,无论怎么搞,都只能得到
update `tableName` set times = times+ ,d = now(),name='abc' where id=2
 
最后查看它的源码,发现它会检查字段的长度,我的times原来长度为int(6),无论怎么搞,它都只载取前面6位...
 
不写了,看球去...
 
 
 
阅读(1139) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~