完整版 ADODB 在某些主機不支援,改用 ADODB_Lite 發現缺少 FetchRow() 方法。官方建議使用 GetRows() 替代,但回傳的是二維陣列,需注意處理。
$rs = $conn->Execute('SELECT * FROM users');
$allRows = $rs->GetRows(); // 或 $rs->GetRows(10) 限制筆數
// 結構:
// [
// [0] => ['id'=>1, 'name'=>'Alice', 'email'=>'a@b.c'],
// [1] => ['id'=>2, 'name'=>'Bob', 'email'=>'b@c.d'],
// ...
// ]
// 只需要第一筆
$result = $rs->GetRows(1); // 限制 1 筆,效能較好
if ($result) {
$row = $result[0]; // 取得關聯陣列
echo $row['name'];
}
$rows = $rs->GetRows();
foreach ($rows as $row) {
echo $row['id'] . ' - ' . $row['name'] . '<br>';
}
// 釋放資源
$rs->Close();
| ADODB 完整版 | ADODB_Lite 替代寫法 |
|---|---|
$rs->FetchRow() | $rs->GetRows(1)[0] ?? null |
while (!$rs->EOF) { $row = $rs->fields; $rs->MoveNext(); } | foreach ($rs->GetRows() as $row) { ... } |
$rs->GetArray() | $rs->GetRows() (相同) |
$rs->GetAssoc() | 需自行實作:array_column($rs->GetRows(), null, 'id') |
GetRows() 回傳二維陣列是 ADODB_Lite 最大的行為差異。掌握 $result[0] 取首筆、foreach 遍歷兩種模式,即可平滑替代 FetchRow()。但長遠來看,標準化於 PDO 才是技術債最低的選擇。