It would probably work if you told php what rs was. For example:
<?php
$db = 'C:\web\membership.mdb';
$conn = new COM('ADODB.Connection') or exit('Cannot start ADO.');
$rs = new COM('ADODB.Recordset') or exit('Cannot create rs');
odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=" . str_replace("/", "\", $_SERVER["DOCUMENT_ROOT"]) . "\web\membership.mdb", "", "")
// Two ways to connect. Choose one.
//$conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$db") or exit('Cannot open with Jet.');
//$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db") or exit('Cannot open with driver.');
$sql = 'SELECT forename, surname
FROM member
ORDER BY forename';
$rs = $conn->Execute($sql);
?>
<table>
<tr>
<th>forename</th>
<th>surname</th>
</tr>
<?php while (!$rs->EOF) { ?>
<tr>
<td><?php echo $rs->Fields['forename']->Value ?></td>
<td><?php echo $rs->Fields['surname']->Value ?></td>
</tr>
<?php $rs->MoveNext() ?>
<?php } ?>
</table>
<?php
$rs->Close();
$conn->Close();
$rs = null;
$conn = null;
?>
See if that works for you.