开发札记 关于Adodb 的单个记录查询
时间:2007-01-31 来源:inu
最近闲得慌,想写个基于PHP+MYSQL的小系统.初衷是想学习一下现在流行的Framework,但是试了一下后发现,每个PHP的Framework并不是像网上吹嘘的那样如何如何简单.真是很郁闷.
除了输出'hello world'简单的外.真正用来应用麻烦的很.国内的Framework文挡不全.用来开发等于重读它的源代码,国外的Framework有比较好的.但是中文文挡也少的可怜.像偶这样E文很菜的人耐心的去看真的是很没有耐心.
最后还是决定用自己以前的代码库+ADODB+SmartTemplate来玩玩.Adodb以前也用的比较少.这次用的时候发现它真是个不错的东东.在使用做有些资料顺便记录下来.供以后有机会看看.
关于Adodb 的单个记录查询
Adodb 的查询结果为一个对象类型.
一般通过 $rs = & $conn->Execute($sql);
这样来获取.
但是这样获取有通常情况下用if($rs)来检测都会得到一个true的结果.
$rs 只有在SQL语句或者数据库端出现问题时才会返回 false 给 $rs.
即使执行
$rs = & $conn->Execute('SELETE * FROM tablename WHERE 1=10');
$rs 也是一个 true 类型的值.
因此在进行数据表中是否存在某条记录时.
用如下的方法:
假设一个数据表中不存在一条id值位$id的记录.
用如下的方法进行查询验证.
$rs = &$conn->Execute("SELECT * FROM tablename WHERE id='$id'");
if(!$rs){
print($conn->ErrorMsg());
}
else {
echo '记录存在数据表tablename中';
}
这样总是输出 "记录存在数据表tablename中";
$rs 接受的结果仅仅在于这个SQL语句是否正确的执行了.如果正确的执行了.则返回一个结果对象(哪怕这个对象中不存在记录内容).如果执行过程中检测出SQL语句的语法不合规范,或者数据未启动,数据表不存在等情况时.则返回一个false值给$rs.
所以如果要查询表test中是否存在某条特定的记录时.需要进一步判断.
.......
if(!$rs){
print($conn->ErrorMsg());
}
else {
$cnt = 0;
while( $arr = $rs->FetchRow() ){
$cnt++;
}
if( $cnt == 1){
echo '有一条记录存在数据表tablename中';
}
else {
echo "数据表中存在 $cnt 条id=$id的记录";
}
}
这样检测比较麻烦.Adodb有个比较直接的方法可以比较方便的检测是否存在某条记录存在.那就是用它的GetOne($sql)方法.
参考Adodb的手册,GetOne($sql)方法返回查询记录的第一条的第一个字段名的值.如果执行过程中出现错误则返回错误.(false)
我们可以检测这个值是否存在即可.
$rs = $conn->GetOne("SELECT * FROM tablename WHERE id='$id'");
if($rs){
echo '记录存在';
}
else {
echo '记录不存在';
}
不过这样也有个不好的地方就是不知道数据表中id=$id的记录到底有多少条.
如果不仅仅要知道是否存在有这样一条记录,还要把这个条记录提取出来.
则可以使用Adodb的GetRow($sql)方法.这个方法把查询的记录结果的第一条记录做为一个数组返回.用法像下面这样.
$rs = $conn->GetRow("SELECT * FROM tablename WHERE id='$id'");
if(is_array($rs)){
echo '记录存在';
echo '数组值:';
echo '';
print_r($rs);
echo '';
}
else {
echo '记录不存在';
}
需要注意的是: GetOne($sql) 和 GetRow($sql) 都能得到一条特定的记录或者得到该记录不存在的信息.但是如果符合查询条件存在多条的时候.这个两个方法只传回第一条记录.其他的都自动的抛弃了.
如果只要得到查询结果的数目.可以使用结果集方法中的RecordCount()方法.
该方法不用带参数.但是它属于结果集的方法.要在用它之前进行先查询.
可以向下面这样用.
$rs = &$conn->Execute("SELECT * FROM tablename");
if(!$rs){
print($conn->ErrorMsg());
}
else {
echo '查询到了: '.$rs->RecordCount().' 个结果.';
}
Adodb手册对RecordCount() 方法的说明为:RecordCount() 返回结果集的数目.如果数据的驱动中不含有相关的统计结果集的方法.Adodb将会缓存查询结果,然后挨个统计记录的数目,但是可以用全局变量 $ADODB_COUNTRECS = false 禁止Adodb 缓存查询结果,这样的话,RecordCount() 会将 -1 做为结果数目进行返回.
MySQL对RecordCount() 支持的很好.
除了输出'hello world'简单的外.真正用来应用麻烦的很.国内的Framework文挡不全.用来开发等于重读它的源代码,国外的Framework有比较好的.但是中文文挡也少的可怜.像偶这样E文很菜的人耐心的去看真的是很没有耐心.
最后还是决定用自己以前的代码库+ADODB+SmartTemplate来玩玩.Adodb以前也用的比较少.这次用的时候发现它真是个不错的东东.在使用做有些资料顺便记录下来.供以后有机会看看.
关于Adodb 的单个记录查询
Adodb 的查询结果为一个对象类型.
一般通过 $rs = & $conn->Execute($sql);
这样来获取.
但是这样获取有通常情况下用if($rs)来检测都会得到一个true的结果.
$rs 只有在SQL语句或者数据库端出现问题时才会返回 false 给 $rs.
即使执行
$rs = & $conn->Execute('SELETE * FROM tablename WHERE 1=10');
$rs 也是一个 true 类型的值.
因此在进行数据表中是否存在某条记录时.
用如下的方法:
假设一个数据表中不存在一条id值位$id的记录.
用如下的方法进行查询验证.
$rs = &$conn->Execute("SELECT * FROM tablename WHERE id='$id'");
if(!$rs){
print($conn->ErrorMsg());
}
else {
echo '记录存在数据表tablename中';
}
这样总是输出 "记录存在数据表tablename中";
$rs 接受的结果仅仅在于这个SQL语句是否正确的执行了.如果正确的执行了.则返回一个结果对象(哪怕这个对象中不存在记录内容).如果执行过程中检测出SQL语句的语法不合规范,或者数据未启动,数据表不存在等情况时.则返回一个false值给$rs.
所以如果要查询表test中是否存在某条特定的记录时.需要进一步判断.
.......
if(!$rs){
print($conn->ErrorMsg());
}
else {
$cnt = 0;
while( $arr = $rs->FetchRow() ){
$cnt++;
}
if( $cnt == 1){
echo '有一条记录存在数据表tablename中';
}
else {
echo "数据表中存在 $cnt 条id=$id的记录";
}
}
这样检测比较麻烦.Adodb有个比较直接的方法可以比较方便的检测是否存在某条记录存在.那就是用它的GetOne($sql)方法.
参考Adodb的手册,GetOne($sql)方法返回查询记录的第一条的第一个字段名的值.如果执行过程中出现错误则返回错误.(false)
我们可以检测这个值是否存在即可.
$rs = $conn->GetOne("SELECT * FROM tablename WHERE id='$id'");
if($rs){
echo '记录存在';
}
else {
echo '记录不存在';
}
不过这样也有个不好的地方就是不知道数据表中id=$id的记录到底有多少条.
如果不仅仅要知道是否存在有这样一条记录,还要把这个条记录提取出来.
则可以使用Adodb的GetRow($sql)方法.这个方法把查询的记录结果的第一条记录做为一个数组返回.用法像下面这样.
$rs = $conn->GetRow("SELECT * FROM tablename WHERE id='$id'");
if(is_array($rs)){
echo '记录存在';
echo '数组值:';
echo '';
print_r($rs);
echo '';
}
else {
echo '记录不存在';
}
需要注意的是: GetOne($sql) 和 GetRow($sql) 都能得到一条特定的记录或者得到该记录不存在的信息.但是如果符合查询条件存在多条的时候.这个两个方法只传回第一条记录.其他的都自动的抛弃了.
如果只要得到查询结果的数目.可以使用结果集方法中的RecordCount()方法.
该方法不用带参数.但是它属于结果集的方法.要在用它之前进行先查询.
可以向下面这样用.
$rs = &$conn->Execute("SELECT * FROM tablename");
if(!$rs){
print($conn->ErrorMsg());
}
else {
echo '查询到了: '.$rs->RecordCount().' 个结果.';
}
Adodb手册对RecordCount() 方法的说明为:RecordCount() 返回结果集的数目.如果数据的驱动中不含有相关的统计结果集的方法.Adodb将会缓存查询结果,然后挨个统计记录的数目,但是可以用全局变量 $ADODB_COUNTRECS = false 禁止Adodb 缓存查询结果,这样的话,RecordCount() 会将 -1 做为结果数目进行返回.
MySQL对RecordCount() 支持的很好.
相关阅读 更多 +
排行榜 更多 +