Hi all,
We are excited to announce the production ready release for the Microsoft Drivers 5.2.0 for PHP for SQL Server. The drivers now support basic select/insert/update/delete functionality with the Always Encrypted feature. The driver enables access to SQL Server, Azure SQL Database and Azure SQL DW from PHP 7.0-7.2 applications on Linux, Windows and macOS.
Notable items about 5.2.0 since 4.3.0:
Added
- Added support for Always Encrypted (see Features)
- Support for Windows Certificate Store
- Support for inserting into and modifying an encrypted column
- Support for fetching from an encrypted column
- Added support for PHP 7.2
- Added support for Microsoft ODBC Driver 17 for SQL Server
- Added support for Ubuntu 17 (requires Microsoft ODBC Driver 17 for SQL Server)
- Added support for Debian 9 (requires Microsoft ODBC Driver 17 for SQL Server)
- Added support for SUSE 12
- Added Driver option to specify the Microsoft ODBC driver
- Valid options are "ODBC Driver 17 for SQL Server", "ODBC Driver 13 for SQL Server", and "ODBC Driver 11 for SQL Server"
- The default driver is ODBC Driver 17 for SQL Server
Changed
- Implementation of PDO::lastInsertId($name) to return the last inserted sequence number if the sequence name is supplied to the function (lastInsertId)
Fixed
- Issue #555 - Hebrew strings truncation (requires Microsoft ODBC Driver 17)
- Adjusted precisions for numeric/decimal inputs with Always Encrypted
- Support for non-UTF8 locales in Linux and macOS
- Fixed crash caused by executing an invalid query in a transaction (Issue #434)
- Added error handling for using PDO::SQLSRV_ATTR_DIRECT_QUERY or PDO::ATTR_EMULATE_PREPARES in a Column Encryption enabled connection
- Added error handling for binding TEXT, NTEXT or IMAGE as output parameter (Issue #231)
- PDO::quote with string containing ASCII NUL character (Issue #538)
- Decimal types with no decimals are correctly handled when Always Encrypted is enabled (PR #544)
- BIGINT as an output param no longer results in value out of range exception when the returned value is larger than a maximum integer (PR #567)
Removed
- Dropped support for Ubuntu 15
- Supplying tablename into PDO::lastInsertId($name) no longer return the last inserted row (lastInsertId)
Limitations
- Always Encrypted is not supported in Linux and macOS
- In Linux and macOS, setlocale() only takes effect if it is invoked before the first connection. Attempting to set the locale after connection will not work
- Always Encrypted functionalities are only supported using MS ODBC Driver 17
- Always Encrypted limitations
- When using sqlsrv_query with Always Encrypted feature, SQL type has to be specified for each input (see here)
- No support for inout / output params when using sql_variant type
Known Issues
- Connection pooling on Linux
doesn'tmay not work properly when usingMicrosoft ODBC Driver 17unixODBC < 2.3.6 - When pooling is enabled in Linux or macOS
- unixODBC <= 2.3.4 (Linux and macOS) might not return proper diagnostics information, such as error messages, warnings and informative messages
- due to this unixODBC bug, fetch large data (such as xml, binary) as streams as a workaround. See the examples here
Connection with Connection Resiliency enabled does not resume properly with Connection Pooling (Issue #678)- Fixed with MS ODBC Driver 17.1- With ColumnEncryption enabled, calling stored procedure with XML parameter does not work (Issue #674)
- Cannot connect with both Connection Resiliency enabled and ColumnEncryption enabled (Issue #577)
- With ColumnEncryption enabled, retrieving a negative decimal value as output parameter causes truncation of the last digit (Issue #705)
- With ColumnEncryption enabled, cannot insert a double into a decimal column with precision and scale of (38, 38) (Issue #706)
- With ColumnEncryption enabled, when fetching decimals as output parameters bound to PDO::PARAM_BOOL or PDO::PARAM_INT, floats are returned, not integers (Issue #707)
Survey
Let us know how we are doing and how you use our driver by taking our pulse survey: https://aka.ms/mssqlphpsurvey
Get Started
Direct downloads can be found on the Github release tag.
David Engel