--TEST-- Test calling sqlsrv_get_field twice in a row. Intentionally trigger various error messages. --FILE-- = $numFields) { $value1 = sqlsrv_get_field($stmt, $idx); PrintError(true); // errors expected because $idx is out of bound } else { if ($idx == 3) { $value1 = sqlsrv_get_field($stmt, $idx, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)); } else { $value1 = sqlsrv_get_field($stmt, $idx); } var_dump($value1); PrintError($errorExpected); } } function PrintError($errorExpected = true) { $errors = sqlsrv_errors(SQLSRV_ERR_ALL); if (!empty($errors)) { $e = $errors[0]; var_dump($e['message']); } elseif ($errorExpected) { echo "An error is expected!\n"; } } function Repro() { startTest("sqlsrv_fetch_field_twice_data_types"); try { set_time_limit(0); sqlsrv_configure('WarningsReturnAsErrors', 1); echo "\nTest begins...\n"; // Connect $conn = connect(); if (!$conn) { fatalError("Could not connect.\n"); } FetchFieldTwice($conn); sqlsrv_close($conn); } catch (Exception $e) { echo $e->getMessage(); } echo "\nDone\n"; endTest("sqlsrv_fetch_field_twice_data_types"); } Repro(); ?> --EXPECTF--  Test begins... string(79) "A statement must be prepared with sqlsrv_prepare before calling sqlsrv_execute." string(63) "The statement must be executed before results can be retrieved." string(52) "An invalid parameter was passed to sqlsrv_get_field." string(52) "An invalid parameter was passed to sqlsrv_get_field." int(968580013) bool(false) string(25) "Field 0 returned no data." float(1.09) bool(false) string(25) "Field 1 returned no data." float(3.437999963760%s) bool(false) string(25) "Field 2 returned no data." string(23) "1756-04-16 23:27:09.130" bool(false) string(25) "Field 3 returned no data." string(52) "An invalid parameter was passed to sqlsrv_get_field." string(52) "An invalid parameter was passed to sqlsrv_get_field." Done Test "sqlsrv_fetch_field_twice_data_types" completed successfully.