*** 高难问题,关于数据库返回结果,请教各位,UP有分! ***

zysoft17 2005-10-14 07:57:25
我想把由Access,Mysql和MS SQL查询出来的结果用一种方法回显回来,如何实现?

昨天想了一夜,没有办法.现在特请教高手指点:

我的代码如下:
function &GetRow($_rs){
//$dbclass代表数据库类型
switch($dbclass){
case "access":
if (! $_rs->eof)
$arr = (Array)$_rs->fields;
else
$arr = false;
return $arr;
break;

case "mysql":
return mysql_fetch_array($this->_rs);
break;

case "mssql":
return mssql_fetch_array($this->_rs);
break;
default:
return false;
break;
}//end.switch;
}//end;

有没有那位兄弟做过,给些指点,最好有源代码和注释.谢谢各位!
...全文
374 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
用odbc_fetch_array,odbc_fetch_into不行,我的access不是用odbc连接的,而是用:
$conn=new COM("ADODB.Connection");
$dsn="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=".realpath($_dbName).";UID=".$_uid.";Pwd=".$_pwd.";";
$conn->open($dsn);
连的,那又应该怎么写:
function access_fetch_array($rs) {
return odbc_fetch_array($rs);
}
段代码.
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
还有ID是自增型,所以没写.
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
我用ADODB插入时只写了两个字段,是用一个特简的数据库做的实验,字段只有两个,一个ID,一个name
id是int型,name是char型,SQL语句是这样写的:

insert into tmpdb(name) values('ddd')
xuzuning 2005-10-14
  • 打赏
  • 举报
回复
“我用ADODB时,不能向access里面插入数据”
这多半是你没有正确转义“'”或你没有使用adodb提供的转义方法进行转义: ' ==> ''
也可能是把保留字做字段名时没有使用正确的声明符: date ==> [date]
也可能是在sql语句中给数值型字段的内容加上了''
总之,目前流行的数据库类已经生存多年了。应该相信开发者们的水平(无论是数据库的操作还是php编程)比自己高很多,出错是小概率事件。
当然,如果觉得他们提供的功能不够用或太庞大,自己写一个也无妨。

to zhongjihang()
access 是有自动编号id的

下面讨论一下你的程序
在你的程序中你使用的不同的查询结果资源:传入的$_rs和类属性$this->_rs
这显然是不妥当的,两者只能用一种。否则极易产生混乱

操作access实际使用的是odbc函数库。
在obdc中返回结果数组可用odbc_fetch_array或odbc_fetch_into,不过在有些版本的php中odbc_fetch_array不好用
你可以写一个access_fetch_array

function access_fetch_array($rs) {
return odbc_fetch_array($rs);
}

function access_fetch_array($rs) {
if(odbc_fetch_into($rs, $ar))
return $ar;
return false;
}
于是你的GetRow可写做
function &GetRow($_rs){
$fun = $dbclass.'_fetch_array';
return $fun($rs);
}
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
不知道问题出在哪里呀?
Meteorlet 2005-10-14
  • 打赏
  • 举报
回复
ADODB很好了,不能插入数据那是你的问题
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
还是请大家给些支持和帮助吧!
zhongjihang 2005-10-14
  • 打赏
  • 举报
回复
我用ADODB时,不能向access里面插入数据?
先解决这个问题可能比写个类还快呢
要说一下的是,用access好像不能有自动编号id的
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
就是因为以前用ADODB有些问题,现在才想自己写个简单的类,解决这些问题的.
我用ADODB时,不能向access里面插入数据.
所以才想自己写一个类,现在遇到最大的问题用是回显了.
xuzuning 2005-10-14
  • 打赏
  • 举报
回复
你的思路有问题,不仅仅是显示返回结果的问题!
你可以使用数据库类,比如adodb

<?php
// 引入 ADODB
include('adodb/adodb.inc.php');

// 建立连线物件,根据你使用的数据库生成相应的对象
$conn = &ADONewConnection('mssql');

// 不侦错
$conn->debug=false;

// DSN 四项基本资料设定,根据你的数据库如实填写
$mch="localhost";
$user="sa";
$pwd="";
$database="test";

// 连接至资料库 test
$conn->Connect($mch, $user, $pwd, $database);

// 执行 Select 由表格 t 取出资料,
// 它会传回一个 ADORecordSet 记录集物件 $rs (RecordSet)
// 实际上 $rs 是一个 cursor 指标,它拥有目前的记录(row 或称 record),
// 该记录的所有栏位资料的内容,存放在 fields 这个阵列之中
// ,以数字为索引,第一个由 0 开始
$rs = &$conn->Execute('select * from tbl_name');

// 若 $rs 为 false,则秀出错误讯息
if (!$rs) {
print $conn->ErrorMsg();
} else {

// 当尚未到达 记录集 $rs 的结束位置(EOF:End Of File)时,(即:还有记录尚未取出时)
while (!$rs->EOF) {
// 秀出所有栏位,$FieldCount() 会传回栏位总数
for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) {
print $rs->fields[$i] . ", ";
}

// 移至下一笔记录
$rs->MoveNext();

// 换列
echo "<br>\n";
}
}
//$rs->Close(); // 可不用
//$conn->Close(); // 可不用
?>
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
更换操作基类 要如何做? 请给出示例代码,好吗?
fylu 2005-10-14
  • 打赏
  • 举报
回复
不懂,帮你顶!
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
如何好呢?
lyjsoft 2005-10-14
  • 打赏
  • 举报
回复
这样做绝对是不明智的,这样服务器上需要装N多的服务了。影响服务器的速度。
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
正在看,没看懂!
keaizhong 2005-10-14
  • 打赏
  • 举报
回复
去PHPE。NET下载一个PHPLIB看看吧。不过好像没有ACCESS的类
zysoft17 2005-10-14
  • 打赏
  • 举报
回复
如何做,写个例子给看看呗!
keaizhong 2005-10-14
  • 打赏
  • 举报
回复
参照PHPLIB中的数据类,更换数据时只要更换操作基类就可以了。

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧