PEAR::DB_QueryTool简介及其不爽之处
时间:2006-07-09 来源:一地风飞
使用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位...
不写了,看球去...
查询类
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位...
不写了,看球去...
相关阅读 更多 +