--- title: "Constants (Microsoft Drivers for PHP for SQL Server) | Microsoft Docs" ms.custom: "" ms.date: "02/11/2019" ms.prod: sql ms.prod_service: connectivity ms.reviewer: "" ms.technology: connectivity ms.topic: conceptual helpviewer_keywords: - "constants" ms.assetid: 9727c944-b645-48d6-9012-18dbde35ee3c author: David-Engel ms.author: v-daenge --- # Constants (Microsoft Drivers for PHP for SQL Server) [!INCLUDE[Driver_PHP_Download](../../includes/driver_php_download.md)] This topic discusses the constants that are defined by the [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]. ## PDO_SQLSRV Driver Constants The constants listed on the [PDO website](https://php.net/manual/book.pdo.php) are valid in the [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]. The following describe the Microsoft-specific constants in the PDO_SQLSRV driver. ### Transaction Isolation Level Constants The **TransactionIsolation** key, which is used with [PDO::__construct](../../connect/php/pdo-construct.md), accepts one of the following constants: - PDO::SQLSRV_TXN_READ_UNCOMMITTED - PDO::SQLSRV_TXN_READ_COMMITTED - PDO::SQLSRV_TXN_REPEATABLE_READ - PDO::SQLSRV_TXN_SNAPSHOT - PDO::SQLSRV_TXN_SERIALIZABLE For more information about the **TransactionIsolation** key, see [Connection Options](../../connect/php/connection-options.md). ### Encoding Constants The PDO::SQLSRV_ATTR_ENCODING attribute can be passed to [PDOStatement::setAttribute](../../connect/php/pdostatement-setattribute.md), [PDO::setAttribute](../../connect/php/pdo-setattribute.md), [PDO::prepare](../../connect/php/pdo-prepare.md), [PDOStatement::bindColumn](../../connect/php/pdostatement-bindcolumn.md), and [PDOStatement::bindParam](../../connect/php/pdostatement-bindparam.md). The available values to pass to PDO::SQLSRV_ATTR_ENCODING are |PDO_SQLSRV driver constant|Description| |-------------------------------|---------------| |PDO::SQLSRV_ENCODING_BINARY|Data is a raw byte stream from the server without performing encoding or translation.

Not valid for PDO::setAttribute.| |PDO::SQLSRV_ENCODING_SYSTEM|Data is 8-bit characters as specified in the code page of the Windows locale that is set on the system. Any multi-byte characters or characters that do not map into this code page are substituted with a single-byte question mark (?) character.| |PDO::SQLSRV_ENCODING_UTF8|Data is in the UTF-8 encoding. This is the default encoding.| |PDO::SQLSRV_ENCODING_DEFAULT|Uses PDO::SQLSRV_ENCODING_SYSTEM if specified during connection.

Use the connection's encoding if specified in a prepare statement.| ### Query Timeout The PDO::SQLSRV_ATTR_QUERY_TIMEOUT attribute is any non-negative integer representing the timeout period, in seconds. Zero (0) is the default and means no timeout. You can specify the PDO::SQLSRV_ATTR_QUERY_TIMEOUT attribute with [PDOStatement::setAttribute](../../connect/php/pdostatement-setattribute.md), [PDO::setAttribute](../../connect/php/pdo-setattribute.md), and [PDO::prepare](../../connect/php/pdo-prepare.md). ### Direct or Prepared Execution You can select direct query execution or prepared statement execution with the PDO::SQLSRV_ATTR_DIRECT_QUERY attribute. PDO::SQLSRV_ATTR_DIRECT_QUERY can be set with [PDO::prepare](../../connect/php/pdo-prepare.md) or [PDO::setAttribute](../../connect/php/pdo-setattribute.md). For more information about PDO::SQLSRV_ATTR_DIRECT_QUERY, see [Direct Statement Execution and Prepared Statement Execution in the PDO_SQLSRV Driver](../../connect/php/direct-statement-execution-prepared-statement-execution-pdo-sqlsrv-driver.md). ### Handling Numeric Fetches The PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE attribute can be used to handle numeric fetches from columns with numeric SQL types (bit, integer, smallint, tinyint, float, and real). When PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE is set to true, the results from an integer column are represented as ints, while SQL floats and reals are represented as floats. This attribute can be set with [PDOStatement::setAttribute](../../connect/php/pdostatement-setattribute.md). You can modify the default decimal formatting behaviour with the PDO::SQLSRV_ATTR_FORMAT_DECIMALS and PDO::SQLSRV_ATTR_DECIMAL_PLACES attributes. The behaviour of these attributes is identical to the corresponding options on the SQLSRV side (**FormatDecimals** and **DecimalPlaces**), except that output params are not supported for formatting. These attributes may be set at either the connection or statement level with [PDO::setAttribute](../../connect/php/pdo-setattribute.md) or [PDOStatement::setAttribute](../../connect/php/pdostatement-setattribute.md), but any statement attribute will override the corresponding connection attribute. For more details, see [Formatting Decimal Strings and Money Values (PDO_SQLSRV Driver)](../../connect/php/formatting-decimals-pdo-sqlsrv-driver.md). ### Handling Date and Time Fetches The PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE specifies whether to retrieve date and time types as [PHP DateTime](http://php.net/manual/en/class.datetime.php) objects. If left false, the default behaviour is to return them as strings. This attribute may be set at either the connection or statement level with [PDO::setAttribute](../../connect/php/pdo-setattribute.md) or [PDOStatement::setAttribute](../../connect/php/pdostatement-setattribute.md), but the statement attribute will override the corresponding connection attribute. For more information, see [How to: Retrieve Date and Time Types as PHP DateTime Objects Using the PDO_SQLSRV Driver](../../connect/php/how-to-retrieve-datetime-objects-using-pdo-sqlsrv-driver.md). ## SQLSRV Driver Constants The following sections list the constants used by the SQLSRV driver. ### ERR Constants The following table lists the constants that are used to specify if [sqlsrv_errors](../../connect/php/sqlsrv-errors.md) returns errors, warnings, or both. |Value|Description| |---------|---------------| |SQLSRV_ERR_ALL|Errors and warnings generated on the last **sqlsrv** function call are returned. This is the default value.| |SQLSRV_ERR_ERRORS|Errors generated on the last **sqlsrv** function call are returned.| |SQLSRV_ERR_WARNINGS|Warnings generated on the last **sqlsrv** function call are returned.| ### FETCH Constants The following table lists the constants that are used to specify the type of array returned by [sqlsrv_fetch_array](../../connect/php/sqlsrv-fetch-array.md). |SQLSRV constant|Description| |-------------------|---------------| |SQLSRV_FETCH_ASSOC|**sqlsrv_fetch_array** returns the next row of data as an associative array.| |SQLSRV_FETCH_BOTH|**sqlsrv_fetch_array** returns the next row of data as an array with both numeric and associative keys. This is the default value.| |SQLSRV_FETCH_NUMERIC|**sqlsrv_fetch_array** returns the next row of data as a numerically indexed array.| ### Logging Constants This section lists the constants that are used to change the logging settings with [sqlsrv_configure](../../connect/php/sqlsrv-configure.md). For more information about logging activity, see [Logging Activity](../../connect/php/logging-activity.md). The following table lists the constants that can be used as the value for the **LogSubsystems** setting: |SQLSRV constant (integer equivalent in parentheses)|Description| |----------------------------------------------------------|---------------| |SQLSRV_LOG_SYSTEM_ALL (-1)|Turns on logging of all subsystems.| |SQLSRV_LOG_SYSTEM_CONN (2)|Turns on logging of connection activity.| |SQLSRV_LOG_SYSTEM_INIT (1)|Turns on logging of initialization activity.| |SQLSRV_LOG_SYSTEM_OFF (0)|Turns logging off.| |SQLSRV_LOG_SYSTEM_STMT (4)|Turns on logging of statement activity.| |SQLSRV_LOG_SYSTEM_UTIL (8)|Turns on logging of error functions activity (such as **handle_error** and **handle_warning**).| The following table lists the constants that can be used as the value for the **LogSeverity** setting: |SQLSRV constant (integer equivalent in parentheses)|Description| |----------------------------------------------------------|---------------| |SQLSRV_LOG_SEVERITY_ALL (-1)|Specifies that errors, warnings, and notices will be logged.| |SQLSRV_LOG_SEVERITY_ERROR (1)|Specifies that errors will be logged.| |SQLSRV_LOG_SEVERITY_NOTICE (4)|Specifies that notices will be logged.| |SQLSRV_LOG_SEVERITY_WARNING (2)|Specifies that warnings will be logged.| ### Nullable Constants The following table lists the constants that you can use to determine whether or not a column is nullable or if this information is not available. You can compare the value of the **Nullable** key that is returned by [sqlsrv_field_metadata](../../connect/php/sqlsrv-field-metadata.md) to determine the column's nullable status. |SQLSRV constant (integer equivalent in parentheses)|Description| |----------------------------------------------------------|---------------| |SQLSRV_NULLABLE_YES (0)|The column is nullable.| |SQLSRV_NULLABLE_NO (1)|The column is not nullable.| |SQLSRV_NULLABLE_UNKNOWN (2)|It is not known if the column is nullable.| ### PARAM Constants The following list contains the constants for specifying parameter direction when you call [sqlsrv_query](../../connect/php/sqlsrv-query.md) or [sqlsrv_prepare](../../connect/php/sqlsrv-prepare.md). |SQLSRV constant|Description| |-------------------|---------------| |SQLSRV_PARAM_IN|Indicates an input parameter.| |SQLSRV_PARAM_INOUT|Indicates a bidirectional parameter.| |SQLSRV_PARAM_OUT|Indicates an output parameter.| ### PHPTYPE Constants The following table lists the constants that are used to describe PHP data types. For information about PHP data types, see [PHP Types](https://php.net/manual/en/language.types.php). |SQLSRV constant|PHP data type| |-------------------|-----------------| |SQLSRV_PHPTYPE_INT|Integer| |SQLSRV_PHPTYPE_DATETIME|Datetime| |SQLSRV_PHPTYPE_FLOAT|Float| |SQLSRV_PHPTYPE_STREAM($encoding1)|Stream| |SQLSRV_PHPTYPE_STRING($encoding1)|String| 1. **SQLSRV_PHPTYPE_STREAM** and **SQLSRV_PHPTYPE_STRING** accept a parameter that specifies the stream encoding. The following table contains the SQLSRV constants that are acceptable parameters, and a description of the corresponding encoding. |SQLSRV constant|Description| |-------------------|---------------| |SQLSRV_ENC_BINARY|Data is returned as a raw byte stream from the server without performing encoding or translation.| |SQLSRV_ENC_CHAR|Data is returned in 8-bit characters as specified in the code page of the Windows locale that is set on the system. Any multi-byte characters or characters that do not map into this code page are substituted with a single-byte question mark (?) character.

This is the default encoding.| |"UTF-8"|Data is returned in the UTF-8 encoding. This constant was added in version 1.1 of the [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]. For more information about UTF-8 support, see [How to: Send and Retrieve UTF-8 Data Using Built-In UTF-8 Support](../../connect/php/how-to-send-and-retrieve-utf-8-data-using-built-in-utf-8-support.md).| > [!NOTE] > When you use **SQLSRV_PHPTYPE_STREAM** or **SQLSRV_PHPTYPE_STRING**, the encoding must be specified. If no parameter is supplied, an error will be returned. For more information about these constants, see [How to: Specify PHP Data Types](../../connect/php/how-to-specify-php-data-types.md), [How to: Retrieve Character Data as a Stream Using the SQLSRV Driver](../../connect/php/how-to-retrieve-character-data-as-a-stream-using-the-sqlsrv-driver.md). ### SQLTYPE Constants The following table lists the constants that are used to describe SQL Server data types. Some constants are function-like and may take parameters that correspond to precision, scale, and/or length. When binding parameters, the function-like constants should be used. For type comparisons, the standard (non function-like) constants are required. For information about SQL Server data types, see [Data Types (Transact-SQL).](../../t-sql/data-types/data-types-transact-sql.md) For information about precision, scale, and length, see [Precision, Scale, and Length (Transact-SQL).](../../t-sql/data-types/precision-scale-and-length-transact-sql.md) |SQLSRV constant|SQL Server data type| |-------------------|------------------------| |SQLSRV_SQLTYPE_BIGINT|bigint| |SQLSRV_SQLTYPE_BINARY|binary| |SQLSRV_SQLTYPE_BIT|bit| |SQLSRV_SQLTYPE_CHAR|char5| |SQLSRV_SQLTYPE_CHAR($charCount)|char| |SQLSRV_SQLTYPE_DATE|date4| |SQLSRV_SQLTYPE_DATETIME|datetime| |SQLSRV_SQLTYPE_DATETIME2|datetime24| |SQLSRV_SQLTYPE_DATETIMEOFFSET|datetimeoffset4| |SQLSRV_SQLTYPE_DECIMAL|decimal5| |SQLSRV_SQLTYPE_DECIMAL($precision, $scale)|decimal| |SQLSRV_SQLTYPE_FLOAT|float| |SQLSRV_SQLTYPE_IMAGE|image1| |SQLSRV_SQLTYPE_INT|int| |SQLSRV_SQLTYPE_MONEY|money| |SQLSRV_SQLTYPE_NCHAR|nchar5| |SQLSRV_SQLTYPE_NCHAR($charCount)|nchar| |SQLSRV_SQLTYPE_NUMERIC|numeric5| |SQLSRV_SQLTYPE_NUMERIC($precision, $scale)|numeric| |SQLSRV_SQLTYPE_NVARCHAR|nvarchar5| |SQLSRV_SQLTYPE_NVARCHAR($charCount)|nvarchar| |SQLSRV_SQLTYPE_NVARCHAR('max')|nvarchar(MAX)| |SQLSRV_SQLTYPE_NTEXT|ntext2| |SQLSRV_SQLTYPE_REAL|real| |SQLSRV_SQLTYPE_SMALLDATETIME|smalldatetime| |SQLSRV_SQLTYPE_SMALLINT|smallint| |SQLSRV_SQLTYPE_SMALLMONEY|smallmoney| |SQLSRV_SQLTYPE_TEXT|text3| |SQLSRV_SQLTYPE_TIME|time4| |SQLSRV_SQLTYPE_TIMESTAMP|timestamp| |SQLSRV_SQLTYPE_TINYINT|tinyint| |SQLSRV_SQLTYPE_UNIQUEIDENTIFIER|uniqueidentifier| |SQLSRV_SQLTYPE_UDT|UDT| |SQLSRV_SQLTYPE_VARBINARY|varbinary5| |SQLSRV_SQLTYPE_VARBINARY($byteCount)|varbinary| |SQLSRV_SQLTYPE_VARBINARY('max')|varbinary(MAX)| |SQLSRV_SQLTYPE_VARCHAR|varchar5| |SQLSRV_SQLTYPE_VARCHAR($charCount)|varchar| |SQLSRV_SQLTYPE_VARCHAR('max')|varchar(MAX)| |SQLSRV_SQLTYPE_XML|xml| 1. This is a legacy type that maps to the varbinary(max) type. 2. This is a legacy type that maps to the newer nvarchar type. 3. This is a legacy type that maps to the newer varchar type. 4. Support for this type was added in version 1.1 of the [!INCLUDE[ssDriverPHP](../../includes/ssdriverphp_md.md)]. 5. These constants should be used in type comparison operations and don't replace the function-like constants with similar syntax. For binding parameters, you should use the function-like constants. The following table lists the SQLTYPE constants that accept parameters and the range of values allowed for the parameter. |SQLTYPE|Parameter|Allowable range for parameter| |-----------|-------------|---------------------------------| |SQLSRV_SQLTYPE_CHAR,

SQLSRV_SQLTYPE_VARCHAR|charCount|1 - 8000| |SQLSRV_SQLTYPE_NCHAR,

SQLSRV_SQLTYPE_NVARCHAR|charCount|1 - 4000| |SQLSRV_SQLTYPE_BINARY,

SQLSRV_SQLTYPE_VARBINARY|byteCount|1 - 8000| |SQLSRV_SQLTYPE_DECIMAL,

SQLSRV_SQLTYPE_NUMERIC|precision|1 - 38| |SQLSRV_SQLTYPE_DECIMAL,

SQLSRV_SQLTYPE_NUMERIC|scale|1 - precision| ### Transaction Isolation Level Constants The **TransactionIsolation** key, which is used with [sqlsrv_connect](../../connect/php/sqlsrv-connect.md), accepts one of the following constants: - SQLSRV_TXN_READ_UNCOMMITTED - SQLSRV_TXN_READ_COMMITTED - SQLSRV_TXN_REPEATABLE_READ - SQLSRV_TXN_SNAPSHOT - SQLSRV_TXN_SERIALIZABLE ### Cursor and Scrolling Constants The following constants specify the kind of cursor that you can use in a result set: - SQLSRV_CURSOR_FORWARD - SQLSRV_CURSOR_STATIC - SQLSRV_CURSOR_DYNAMIC - SQLSRV_CURSOR_KEYSET - SQLSRV_CURSOR_CLIENT_BUFFERED The following constants specify which row to select in the result set: - SQLSRV_SCROLL_NEXT - SQLSRV_SCROLL_PRIOR - SQLSRV_SCROLL_FIRST - SQLSRV_SCROLL_LAST - SQLSRV_SCROLL_ABSOLUTE - SQLSRV_SCROLL_RELATIVE For information on using these constants, see [Specifying a Cursor Type and Selecting Rows](../../connect/php/specifying-a-cursor-type-and-selecting-rows.md). ## See Also [SQLSRV Driver API Reference](../../connect/php/sqlsrv-driver-api-reference.md)