清风徐来
知是行之始,行是知之成

ADODB的简单使用

PHP ADODB 约 4 分钟

最近要用到它吧,于是清风就整理了一下

  • 最简单的使用方式
  • 取回关联数组形式的结果集
  • 把结果集用做对象的方法更简短一些$result->FetchNextObject()
  • 常用函数qstr(),DBDate(),Insert_ID(),Affected_Rows()(都是ADODB对象的方法)
  • 分页要用到的方法,SelectLimit($query,$num,$offset)
  • ADODB的prepare query(编译查询?也许会提高性能,主要是它的占位参数方式比较喜欢)
  • 智能事务处理(Smart Transactions)
  • 查询缓存CacheExecute()
  • 使用AutoExecute(),生成Update 和 Insert SQL语句

最简单的使用方式:

Connect("localhost", "user", "pass", "youdb") or die("Unable to connect!"); // 定义查询sql $query = "SELECT * FROM yourtable"; // 执行sql $result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg()); // 循环输出,注意要MoveNext(),否则死循环 while (!$result->EOF) { echo $result->fields[1] . " - " . $result->fields[2] . "n"; $result->MoveNext(); } // 打印结果集中的记录数 echo "n[" . $result->RecordCount() . " rows returned]n"; // 关闭连接 $db->Close(); ?> 取回关联数组形式的结果集,代码如下(多了#注释下面的一句): Connect("localhost", "user", "pass", "youdb") or die("Unable to connect!");

配置取回的结果集为关联数组 #

$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;

// 定义查询sql $query = “SELECT * FROM yourtable”; // 执行sql $result = $db->Execute($query) or die(“Error in query: $query. " . $db->ErrorMsg()); // 循环输出,注意要MoveNext(),否则死循环 while (!$result->EOF) { echo $result->fields[‘firstname’] . " - " . $result->fields[’lastname’] . “n”; $result->MoveNext(); } // 打印结果集中的记录数 echo “n[” . $result->RecordCount() . " rows returned]n”; // 关闭连接 $db->Close(); ?> 把结果集用做对象的方法更简短一些($result->FetchNextObject()):

Connect("localhost", "user", "pass", "youdb") or die("Unable to connect!"); // 定义查询sql $query = "SELECT * FROM yourtable"; // 执行sql $result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg()); // 循环输出 while ($row = $result->FetchNextObject()) { echo $row->firstname . " - " . $row->lastname . "n"; } // 打印结果集中的记录数 echo "n[" . $result->RecordCount() . " rows returned]n"; // 关闭连接 $db->Close(); ?> 常用函数qstr(),DBDate(),Insert_ID(),Affected_Rows()(都是ADODB对象的方法): Connect("localhost", "user", "pass", "youdb") or die("Unable to connect!");

使用qstr转码,让“’”适应不同的DB #

$title = $db->qstr(“It’s Not Me, It’s You!”);

DBDate()函数来转换不同数据库之间的日期内定格式 #

$createdate = $db->DBDate(time());

$query = “INSERT INTO yourtable (title, createdate) VALUES ($title, $createdate)”; $result = $db->Execute($query) or die(“Error in query: $query. " . $db->ErrorMsg());

打印由 Insert_ID()取得的刚刚插入的记录的ID #

if ($result) { echo “Last inserted ID is " . $db->Insert_ID(); }

$query = “DELETE FROM yourtable WHERE author = ‘J. Luser’”; $result = $db->Execute($query) or die(“Error in query: $query. " . $db->ErrorMsg());

受影响的记录数 #

if ($result) { echo $db->Affected_Rows() . " rows deleted”; }

// 关闭连接 $db->Close(); ?> 分页要用到的方法,SelectLimit($query,$num,$offset):

Connect("localhost", "user", "pass", "youdb") or die("Unable to connect!"); # 取5条记录,从记录2开始(偏离量是从0开始的,记录2实际是第三条记录了) $query = "SELECT * FROM yourtable"; $result = $db->SelectLimit($query, 5, 2) or die("Error in query: $query. " . $db->ErrorMsg()); // 循环输出 while (!$result->EOF) { echo $result->fields[1] . " - " . $result->fields[2] . "n"; $result->MoveNext(); } // 关闭连接 $db->Close(); ?> ADODB的prepare query(预备查询,也许会提高性能,主要是它的占位参数方式比较喜欢): Connect("localhost", "user", "pass", "youdb") or die("Unable to connect!");

prepare query #

$query = $db->Prepare(“INSERT INTO yourtable (firstname, lastname) VALUES (?, ?)”);

插入的数据 #

$arr = array(‘wensi’,‘cater’);

执行 #

$result = $db->Execute($query, array($arr[0], $arr[1])) or die(“Error in query: $query. " . $db->ErrorMsg());

// 关闭连接 $db->Close(); ?> 智能事务处理(Smart Transactions):

BeginTrans(); $ok = $conn->Execute($sql); if ($ok) $ok = $conn->Execute($sql2); if (!$ok) $conn->RollbackTrans(); else $conn->CommitTrans(); // 现在,如果正常CompleteTrans()会提交事务,如果有错误则CompleteTrans()会回滚 $conn->StartTrans(); $conn->Execute($sql); $conn->Execute($Sql2); $conn->CompleteTrans(); ?> 查询缓存(CacheExecute()): PConnect('localhost','userid','password','database'); # cache 15 secs $rs = $conn->CacheExecute(15, 'select * from table'); /* 生成html表格 */ rs2html($rs); ?> 使用AutoExecute(),生成Update 和 Insert SQL语句: AutoExecute($yourtable, $record, 'INSERT');
// UPDATE
$record["firstname"] = "Caroline"; 
$record["lastname"] = "Smith"; 
# 更新了Smith的firstname
$insertSQL = $conn->AutoExecute($yourtable, $record, 'UPDATE', 'id = 1'); 

?>