Skip to content

Production release for PHP drivers for SQL Server on Mac OS X,Linux, and Windows

Compare
Choose a tag to compare
@yukiwongky yukiwongky released this 23 Mar 19:05
· 587 commits to master since this release
0de3d8a

We are excited to announce the Production ready release for SQLSRV and PDO_SQLSRV drivers, supporting the basic CRUD functionalities with Always Encrypted. Both drivers have been built with PHP 7.* and tested on all supported platforms (Windows, Ubuntu 16 & 17, Debian 8 & 9, RedHat 7, SUSE 12, El Capitan and Sierra).

Notable items about this release (5.2.0) since the last production release (4.3.0) are:

Added

  • Added support for Always Encrypted with basic CRUD functionalities (see here)
    • Support for Windows Certificate Store (use connection keyword ColumnEncryption)
    • 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 MS ODBC Driver 17
  • Added support for Ubuntu 17 (requires MS ODBC Driver 17)
  • Added support for Debian 9 (requires MS ODBC Driver 17)
  • Added support for SUSE 12
  • Added Driver option to set the MS ODBC driver, Added "Driver" option, valid values 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 MS 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 AE 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 may not work properly when using 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)
  • 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

Thank you for taking the time to participate in our survey. You can help us improve by letting us know how we are doing and how you use PHP by taking our December pulse survey:

Install

  • On Linux and macOS run the commands below:
    sudo pecl install sqlsrv-5.2.0
    sudo pecl install pdo_sqlsrv-5.2.0
  • Download Windows binaries from SQLSRV or PDO_SQLSRV PECL repository.