Partilhar via


Microsoft Drivers 5.2.0 for PHP for SQL Server Released!

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't may not work properly when using Microsoft ODBC Driver 17 unixODBC < 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