表 _Test:欄位 UserId (int)、UserName (varchar)、CreateTime (datetime)。數據 5 行。
<?php
while ($row = mssql_fetch_row($query)) {
echo $row['UserId'] . '::' . $row[1] . '<br>';
}
// 報錯: Notice: Undefined index: UserId
// 輸出: ::王小一 ::王小二 ...
特點:僅返回數字索引(0 起),無法用字段名訪問。等同 mssql_fetch_array($query, MSSQL_NUM)。
<?php
while ($row = mssql_fetch_assoc($query)) {
echo $row['UserId'] . '::' . $row[1] . '<br>';
}
// 報錯: Notice: Undefined offset: 1
// 輸出: 1:: 2:: 3:: ...
特點:僅返回關聯索引(字段名),無法用數字索引訪問。等同 mssql_fetch_array($query, MSSQL_ASSOC)。
<?php
while ($row = mssql_fetch_array($query)) {
echo $row['UserId'] . '::' . $row[1] . '<br>';
}
// 正常輸出: 1::王小一 2::王小二 ...
特點:同時包含數字索引和關聯索引,**最靈活**。可選第二參數:MSSQL_NUM、MSSQL_ASSOC、MSSQL_BOTH(默認)。
<?php
while ($row = mssql_fetch_object($query)) {
echo $row->UserId . '::' . $row->CreateTime . '<br>';
}
// 輸出: 1::06 7 2011 4:46PM ...
特點:返回 stdClass 對象,字段名作為屬性,**只能用 -> 訪問**,不支持數組語法。
| 函數 | 返回類型 | 字段名訪問 | 數字索引訪問 | 對象語法 | 內存佔用 | 推薦場景 |
|---|---|---|---|---|---|---|
| mssql_fetch_row | 數組 | ❌ | ✅ | ❌ | 最低 | 只需順序讀取、極大結果集節省內存 |
| mssql_fetch_assoc | 數組 | ✅ | ❌ | ❌ | 中 | 語義清晰、不需數字索引 |
| mssql_fetch_array | 數組 | ✅ | ✅ | ❌ | 最高 (雙份) | 通用、需兼容兩種訪問 |
| mssql_fetch_object | 對象 | ✅ (屬性) | ❌ | ✅ | 中 | 面向對象風格、配合屬性訪問 |
mssql_* 函數已移除 (PHP 7.0+),諷使用:
$stmt->fetch(PDO::FETCH_ASSOC) 等模式對應上述行為。sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)。| PDO Fetch Mode | 對應舊函數 | 返回結構 |
|---|---|---|
| PDO::FETCH_NUM | mssql_fetch_row | 數字索引數組 |
| PDO::FETCH_ASSOC | mssql_fetch_assoc | 關聯索引數組 |
| PDO::FETCH_BOTH | mssql_fetch_array | 雙重索引數組 |
| PDO::FETCH_OBJ | mssql_fetch_object | stdClass 對象 |
| PDO::FETCH_CLASS | - | 映射到自定義類 |