11. 更新记录(Update)
您可以用传统的方式:
$sql ="UPDATE t SET name='john', year=28 WHERE year=18";
$conn->Execute($sql);
也可以用以下这种方式:
debug=true;
// DSN 四项基本数据设定
$mch="localhost";
$user="piza";
$pwd="ooo123";
$database="test";
// 连接至数据库 test
$conn->PConnect($mch, $user, $pwd, $database);
// 选择要更新的那一笔记录
$sql = "select * from t where year=18";
$rs = $conn->Execute($sql);
// 用一个空数组来装要更新的数据
$r = array();
$r['name']='john';
$r['year']=28;
// 用 GetUpdateSQL 函式来制作一个完整的 sql 命令,此 sql 命令放在 $updateSQL 中
$updateSQL = $conn->GetUpdateSQL($rs, $r);
// 执行更新
$conn->Execute($updateSQL);
$conn->Close();
?>
侦错讯息如下:
-------------------------------------------------------------
(mysql): select * from t where year=18
-------------------------------------------------------------
(mysql): UPDATE t SET name = 'john', year = 28 WHERE year=18
-------------------------------------------------------------
12. 删除记录(Delete)
删除记录很简单,采传统方式即可: $sql = "DELETE FROM t WHERE year=18";
$rs = $conn->Execute($sql);
13. 使用字段对象(Field Objects)
这里示范字段对象 FetchField 的用法,用以取得字段名称及字段型态:
$sql = "select * from t";
$rs = &$conn->Execute($sql);
if ($rs) {
while (!$rs->EOF) {
// 取出第二个字段
$f = $rs->FetchField(1);
// 印出字段名称 及 字段型态
print $f->name . ":" . $f->type;
$rs->MoveNext();
print "
n";
}
}
另外,ADODB 提供一个 RecordSet 函式 MetaType(),可将原始的字段型态转成一般型态代码:
C : 字符
X : text
B : blob
D : 日期
T : timestamp
L : 布尔值或位
I : 整数
N : 数字型态,包括:自动增加、数值、浮点数、实数及整数
R : serial、自动增加
用例:
$f = $rs->FetchField(1);
// 印出字段名称 及 字段型态的代码
print $f->name . ":" . $rs->MetaType($f->type);
14. 简单分页(Pager)
ADODB 提供一种简单分页显示记录的方法,使用前,要将 adodb-pager.inc.php 引入。
Connect($mch, $user, $pwd, $database);
$sql = "select * from t";
// 产生 pager 对象
$pager = new ADODB_Pager($db, $sql);
// 每一页秀 5 笔记录
$pager->Render($rows_per_page=5);
?>
结果如下:
Figure 1. 简单分页功能
每页显示记录的数目是由 Render() 来控制的,若没有传入指定的 row 数给 Render(),默认值每页秀 10 笔。
另外,字段名称也可以改变,如下示范:
Connect($mch, $user, $pwd, $database);
$sql = "select name as '姓名', year as '年纪' from t";
// 产生 pager 对象
$pager = new ADODB_Pager($db, $sql);
// 每一页秀 5 笔记录
$pager->Render($rows_per_page=5);
?>
结果如下:
Figure 2. 改变字段名称
15. 输出 CSV 档
ADODB 提供输出 CSV 档的方法,使用前,要将 toexport.inc.php 引入。
Connect($mch, $user, $pwd, $database);
$sql = "select name as '姓名', year as '年纪' from t";
$rs = $db->Execute($sql);
// 秀出 CSV 格式
print rs2csv($rs);
?>
结果如下:
姓名,年纪
abcde,45
yyy,20
ppp,34
mmm,13
hhh,41
rrr,65
kkk,29
miso,154
sss,89
abc,18
abcde,0
uyt,58
john,28
也可用 tab 分隔字段,使用 rs2tab 方法如下:
print rs2tab($rs, false);
注: false 表示不显示字段名称
结果如下:
abcde 45
yyy 20
ppp 34
mmm 13
hhh 41
rrr 65
kkk 29
miso 154
sss 89
abc 18
abcde 0
uyt 58
john 28
若是 print rs2tab($rs, true);
结果如下:
姓名 年纪
abcde 45
yyy 20
ppp 34
mmm 13
hhh 41
rrr 65
kkk 29
miso 154
sss 89
abc 18
abcde 0
uyt 58
john 28
也可以将结果由标准输出(STDOUT)显示,使用 rs2tabout 方法如下:
print rs2tabout($rs);
执行结果如下:
Figure 1. 在console中显示结果
也可以存成 CSV 档:
// 档案路径
$path = "/tmp/test.csv";
// 开档供写入
$fhd = fopen($path, "w");
// 若开档成功
if ($fhd) {
// 则写入 CSV
rs2csvfile($rs, $fhd);
// 也可以使用 rs2tabfile($rs, $fhd);
// 关档
fclose($fhd);
}
结果如下:
[ols3@p web]$ cat /tmp/test.csv
姓名,年纪
abcde,45
yyy,20
ppp,34
mmm,13
hhh,41
rrr,65
kkk,29
miso,154
sss,89
abc,18
abcde,0
uyt,58
john,28
16. 取出一定笔数的记录 (使用 SelectLimit)
ADODB 提供一个 ADOConnect 函式 SelectLimit,可供您取出一定笔数的记录,用法如下:
$conn->Connect($mch, $user, $pwd, $database);
rs = $conn->SelectLimit("Select * from t", 3, 1);
// 取出 3 笔、在第 1 笔之后
// 秀出这 3 笔记录
if ($rs) {
while( $ar = $rs->FetchRow() ) {
print $ar['name'] ." " . $ar['year'];
print "
n";
}
}
上式是说:在第 1 笔记录之后,取出 3 笔,也就是第 2、3、4 笔记录。
结果如下:
--------------------------------------
(mysql): select * from t LIMIT 1,3
--------------------------------------
注意 ! SelectLimit 的写法刚好和 MySQL 语法相反 !