/** * Retrieve the next row returned from a specific database query * @param bool|ADORecordSet $p_result Database Query Record Set to retrieve next result for. * @return array Database result */ function db_fetch_array(&$p_result) { global $g_db, $g_db_type; if ($p_result->EOF) { return false; } # mysql obeys FETCH_MODE_BOTH, hence ->fields works, other drivers do not support this if ($g_db_type == 'mysql' || $g_db_type == 'odbc_mssql' || $g_db_type == 'mssqlnative') { $t_array = $p_result->fields; $p_result->MoveNext(); return $t_array; } else { $t_row = $p_result->GetRowAssoc(false); static $t_array_result; static $t_array_fields; if ($t_array_result != $p_result) { // new query $t_array_result = $p_result; $t_array_fields = null; } else { if ($t_array_fields === null) { $p_result->MoveNext(); return $t_row; } } $t_convert = false; $t_fieldcount = $p_result->FieldCount(); for ($i = 0; $i < $t_fieldcount; $i++) { if (isset($t_array_fields[$i])) { $t_field = $t_array_fields[$i]; } else { $t_field = $p_result->FetchField($i); $t_array_fields[$i] = $t_field; } switch ($t_field->type) { case 'bool': switch ($t_row[$t_field->name]) { case 'f': $t_row[$t_field->name] = false; break; case 't': $t_row[$t_field->name] = true; break; } $t_convert = true; break; default: break; } } if ($t_convert == false) { $t_array_fields = null; } $p_result->MoveNext(); return $t_row; } }
/** * Utility function to turn a result set into an associative array of records * This method turns a result set into a hash of records (keyed by the first * field in the result set) * * @param ADORecordSet $rs An ADODB RecordSet object. * @return mixed An array of objects, or false if the RecordSet was empty. * @throws SQLException * @access private */ function recordset_to_assoc(ADORecordSet $rs) { if ($rs && $rs->RecordCount() > 0) { // First of all, we are going to get the name of the first column // to introduce it back after transforming the recordset to assoc array // See http://docs.moodle.org/en/XMLDB_Problems, fetch mode problem. $firstcolumn = $rs->FetchField(0); // Get the whole associative array if ($records = $rs->GetAssoc(true)) { foreach ($records as $key => $record) { $record[$firstcolumn->name] = $key; $objects[$key] = (object) $record; } return $objects; } else { return false; } } else { return false; } }