/** * Low level handling getting a row from a result set; automatically * makes all fetched values strings, just like the other PHP db functions. * We have to do this since the sqlsrv extension returns row values in thier * native types, which causes problems with how we handle things. * * @param resource $result * @return array */ private function _fetchRowAssoc($result) { if (!is_resource($result)) { return false; } $row = array(); $fieldnames = $this->getFieldsArray($result); $fieldMetaData = sqlsrv_field_metadata($result); if (sqlsrv_fetch($result)) { for ($i = 0; $i < sqlsrv_num_fields($result); $i++) { if ($fieldMetaData[$i]['Type'] == -9 || $fieldMetaData[$i]['Type'] >= SQLSRV_SQLTYPE_NVARCHAR(1) && $fieldMetaData[$i]['Type'] <= SQLSRV_SQLTYPE_NVARCHAR(8000) || $fieldMetaData[$i]['Type'] >= SQLSRV_SQLTYPE_NCHAR(1) && $fieldMetaData[$i]['Type'] <= SQLSRV_SQLTYPE_NCHAR(8000) || $fieldMetaData[$i]['Type'] == SQLSRV_SQLTYPE_NVARCHAR('max') || $fieldMetaData[$i]['Type'] == SQLSRV_SQLTYPE_NCHAR('max')) { $row[$fieldnames[$i]] = iconv("utf-16le", "utf-8", sqlsrv_get_field($result, $i, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY))); } else { $row[$fieldnames[$i]] = sqlsrv_get_field($result, $i, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR)); } } } else { sqlsrv_free_stmt($result); } return $row; }
protected function getSqlType() { $sqlType = null; $phpType = null; switch ($this->type) { case SqlParameterTypes::SqlInt: $sqlType = SQLSRV_SQLTYPE_INT; $phpType = SQLSRV_PHPTYPE_INT; break; case SqlParameterTypes::SqlBigInt: $sqlType = SQLSRV_SQLTYPE_BIGINT; $phpType = SQLSRV_PHPTYPE_INT; break; case SqlParameterTypes::SqlBit: $sqlType = SQLSRV_SQLTYPE_BIT; $phpType = SQLSRV_PHPTYPE_INT; break; case SqlParameterTypes::SqlFloat: $sqlType = SQLSRV_SQLTYPE_FLOAT; $phpType = SQLSRV_PHPTYPE_FLOAT; break; case SqlParameterTypes::SqlDecimal: $sqlType = SQLSRV_SQLTYPE_DECIMAL($this->precision, $this->scale); $phpType = SQLSRV_PHPTYPE_FLOAT; break; case SqlParameterTypes::SqlNVarChar: $sqlType = SQLSRV_SQLTYPE_NVARCHAR($this->size); $phpType = SQLSRV_PHPTYPE_STRING("UTF-8"); break; case SqlParameterTypes::SqlNVarCharMax: $sqlType = SQLSRV_SQLTYPE_NVARCHAR('max'); $phpType = SQLSRV_PHPTYPE_STRING("UTF-8"); break; case SqlParameterTypes::SqlXml: $sqlType = SQLSRV_SQLTYPE_XML; $phpType = SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY); break; case SqlParameterTypes::SqlUniqueIdentifier: $sqlType = SQLSRV_SQLTYPE_UNIQUEIDENTIFIER; $phpType = SQLSRV_PHPTYPE_STRING("UTF-8"); break; case SqlParameterTypes::SqlTinyInt: $sqlType = SQLSRV_SQLTYPE_TINYINT; $phpType = SQLSRV_PHPTYPE_INT; break; case SqlParameterTypes::SqlDate: $sqlType = SQLSRV_SQLTYPE_DATE; $phpType = SQLSRV_PHPTYPE_DATETIME; break; case SqlParameterTypes::SqlDateTime: $sqlType = SQLSRV_SQLTYPE_DATETIME; $phpType = SQLSRV_PHPTYPE_DATETIME; break; case SqlParameterTypes::SqlTime: $sqlType = SQLSRV_SQLTYPE_TIME; $phpType = SQLSRV_PHPTYPE_DATETIME; break; case SqlParameterTypes::SqlTimestamp: $sqlType = SQLSRV_SQLTYPE_TIMESTAMP; $phpType = SQLSRV_PHPTYPE_DATETIME; break; } return array($sqlType, $phpType); }