Verification: a143cc29221c9be0

Php and mssql on linux

Php and mssql on linux

Connect PHP to SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017, SQL Server 2019 and SQL Server Express

When developing this tutorial, we accessed SQL Server 2000–2019 and Express databases from PHP on UNIX and Linux.

PHP and Linux

To access SQL Server from PHP on Linux, we used Easysoft ODBC drivers with PHP on RedHat and Ubuntu (Edgy Eft, Feisty Fawn, Gutsy Gibbon and Hardy Heron). Easysoft ODBC drivers should work with any recent 32-bit or 64-bit Linux distribution—CentOS, Debian GNU/Linux, Fedora, Kubuntu, Mandrake/Mandriva, OpenSUSE/SUSE, RedHat Enterprise Linux (RHEL), Slackware and so on.

To connect PHP on UNIX/Linux with SQL Server, we used:

  • PHP 4.2 or later.
  • Apache 2.0 or later.
  • SQL Server ODBC driver.

PHP 4.2 or Later

To check which version of PHP you are running, use the php -v command from the shell prompt.

If you get a "command not found" error, there is no PHP on your PATH (perhaps because you have not installed it). If PHP is installed, you should see something like "4.2.2".

If you have an older version of PHP than the required one, go to http://www.php.net, and get an up to date distribution. Documentation and installation instructions can be found both in the README that is included in the distribution and at http://www.php.net/docs.php.

We tested Easysoft ODBC drivers with PHP 5.4.5, PHP 5.3.10, PHP 5.2.3 and PHP 4.2.2.

Installing PHP

We used a package manager to install PHP on our Linux client machines. A package manager is a program that installs and uninstalls software, and keeps track of the components each piece of software needs. On Ubuntu, we used the Synaptic package manager to install PHP. On RedHat, we used the redhat-config-packages package manager to install PHP from RPMs.

Installing PHP from Packages on Ubuntu

  1. On the System menu, choose Administration, and then choose Synaptic Package Manager.
  2. Type the administrative (sudo) password when prompted.
  3. In Synaptic Package Manager, mark php5 and php5-odbc for installation.

    Accept when prompted to install dependent packages (libapache2-mod-php5, php5-common and unixodbc).

  4. If you want to run PHP from the command line as well as from under Apache, mark php-cli for installation.
  5. Click the Apply button.

Installing PHP from RPMs on RedHat

  1. Click the RedHat icon, and then click Add/Remove Applications from the System Settings menu.
  2. Type the root password when prompted.
  3. Add the php and php-odbc Web Server packages.
  4. Click the Update button.

Testing PHP

The first PHP script you create should call the phpinfo function, as this function allows you to test that your PHP distribution is working correctly. The phpinfo function displays extensive configuration information about PHP and the system on which PHP is running. To create this PHP script, you need to do something like this:

  1. Create a file called phpinfo.php.
  2. Add these lines to phpinfo.php:
    #!/bin/bash
    # This is a simple one liner that amongst other things returns relevant PHP information
    ?php
        phpinfo()
    ?>
    
  3. Save this file, and then from the command line, type:
    php phpinfo.php > newhtmlfile.html 
    

    This redirects the output from phpinfo into an HTML file called newhtmlfile.html.

Apache 2.0 or Later

When developing this tutorial, we ran PHP under Apache 2.4, Apache 2.2 and Apache 2.0. To find out which version of Apache you are running, enter the following command at the shell prompt:

httpd_bin_dir/httpd -V

–Or–

httpd_bin_dir/apache2 -V

where httpd_bin_dir is the directory where the http daemon is installed. For example, on Linux, the default location is normally /usr/sbin. The -V option displays information about the Apache installation. For example:

Server version: Apache/2.2.4 (Ubuntu)
Server built:   Oct  4 2007 22:47:20
Server's Module Magic Number: 20051115:5
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE

On Ubuntu, make sure that /etc/apache2/apache2.conf contains an entry similar to:

LoadModule php5_module modules/libphp5.so

The entry enables Apache to dynamically load the PHP module.

On RedHat, check /etc/httpd/conf.d/php.conf for this entry.

We created both .php and .phtml sample files for this tutorial. To tell Apache which module it should use to process the .php and .phtml files, we added this entry to the Apache httpd.conf file (apache2.conf on Ubuntu):

# Use the PHP module to process .php and .phtml files.
AddType application/x-httpd-php .php .phtml

Note All the examples in this tutorial will work even if you do not have a web server installed. You can also run the example PHP scripts from the shell prompt.

SQL Server ODBC Driver

We used our UNIX/Linux ODBC driver for SQL Server 7.0, 2000, 2005, 2008, 2012, 2014, 2016, 2017, 2019 and Express to connect PHP to remote SQL Server databases.

  1. Download the SQL Server ODBC driver for your PHP client platform. (Registration required.)

    If the SQL Server ODBC driver is not currently available for your platform, check the list of ODBC-ODBC Bridge Client platforms. The ODBC-ODBC Bridge is an alternative SQL Server solution from Easysoft, which you can download from this site.

  2. Install and license the SQL Server ODBC driver on the machine where PHP is installed.

    For installation instructions, see the ODBC driver documentation. Refer to the documentation to see which environment variables you need to set (LD_LIBRARY_PATH, LIBPATH, LD_RUN_PATH, SHLIB_PATH depending on the driver, platform and linker).

  3. Create an ODBC data source in /etc/odbc.ini that connects to the SQL Server database you want to access from PHP. For example, this SQL Server ODBC data source connects to a SQL Server Express instance that serves the Northwind database:
    [MSSQL-PHP]
    Driver                  = Easysoft ODBC-SQL Server
    Server                  = my_machine\SQLEXPRESS
    User                    = my_domain\my_user
    Password                = my_password
    # If the database you want to connect to is the default
    # for the SQL Server login, omit this attribute
    Database                = Northwind
    
  4. Use isql to test the new data source. For example:
    cd /usr/local/easysoft/unixODBC/bin
    ./isql -v MSSQL-PHP
    

    At the prompt, type "help" to display a list of tables. To exit, press return in an empty prompt line.

The following PHP script accesses a remote SQL Server database, selects and then fetches some test data. Use it to check that you can successfully access your SQL Server instance from a PHP script. Remember to replace the data_source_name and database username and password placeholders with appropriate values for your database.

To run this script:

  1. Copy the script shown below into a new file.
  2. Replace data_source_name, database_username and database_password with your SQL Server ODBC data source, login name and password.
  3. To run the script under Apache, save the file below your Apache web server’s document root directory. For example, /var/www/apache2-default/php-mssql-connection.phtml. Then view the file in a web browser:

    http://localhost/php-mssql-connection.phtml

    If your web browser is not running on the same machine as the web server, replace localhost with the web server’s host name or IP address.

  4. To run the script from the command line, save the file. For example, /tmp/php-mssql-connection.php. Then run $ php /tmp/php-mssql-connection.php.
?php
/*
PHP MSSQL Example

Replace data_source_name with the name of your data source.
Replace database_username and database_password
with the SQL Server database username and password.
*/
$data_source='data_source_name';
$user='database_username';
$password='database_password';

// Connect to the data source and get a handle for that connection.
$conn=odbc_connect($data_source,$user,$password);
if (!$conn){
    if (phpversion()  '4.0'){
      exit("Connection Failed: . $php_errormsg" );
    }
    else{
      exit("Connection Failed:" . odbc_errormsg() );
    }
}

// This query generates a result set with one record in it.
$sql="SELECT 1 AS test_col";

# Execute the statement.
$rs=odbc_exec($conn,$sql);

// Fetch and display the result set value.
if (!$rs){
    exit("Error in SQL");
}
while (odbc_fetch_row($rs)){
    $col1=odbc_result($rs, "test_col");
    echo "$col1\n";
}

// Disconnect the database from the database handle.
odbc_close($conn);
?>

Our next example PHP script uses the odbc_tables function to list the tables in a SQL Server database. To run this script:

  1. Copy the script shown below into a new file.
  2. Replace data_source_name, database_username and database_password with your SQL Server ODBC data source, login name and password.
  3. Save the file below your Apache web server’s document root directory. For example, /var/www/apache2-default/mssql-php-retrieve-data.phtml.
html>
head>
title>MSSQL PHP Example -- Table Listtitle>
head>
body>
?php
/*
This script will list all the tables in the specified data source.
Replace datasource_name with the name of your data source.
Replace database_username and database_password
with the SQL Server database username and password.
*/
$data_source='data_source_name';
$user='database_username';
$password='database_password';

// Connect to the data source and get a handle for that connection.
$conn=odbc_connect($data_source,$user,$password);
if (!$conn){
    if (phpversion()  '4.0'){
      exit("Connection Failed: . $php_errormsg" );
    }
    else{
      exit("Connection Failed:" . odbc_errormsg() );
    }
}

// Retrieves table list.
$result = odbc_tables($conn);

   $tables = array();
   while (odbc_fetch_row($result))
     array_push($tables, odbc_result($result, "TABLE_NAME") );
// Begin table of names.
     echo "
";echo"";// Create table rows with data.foreach($tables as $tablename) {$tablecount=$tablecount+1;echo"";}// End table.echo"
Table Count Table Name
$tablecount $tablename
"
; // Disconnect the database from the database handle. odbc_close($conn); ?> body> html>

Note The PHP script shown above uses an HTML table to lay out the results. The script is wrapped in HTML therefore and is intended to be run under the Apache web server. If you want to run the script from a shell prompt:

  1. Copy the script shown below into a new file.
  2. Replace datasource_name, database_username and database_password with your SQL Server ODBC data source, login name and password.
  3. Save the file. For example, /tmp/mssql-php-retrieve-data.php.
  4. Run the script from the command line. For example $ php /tmp/mssql-php-retrieve-data.php.
?php
/*
MSSQL PHP Example

This script will list all the tables in the specified data source.
Replace datasource_name with the name of your data source.
Replace database_username and database_password
with the SQL Server database username and password.
*/
$data_source='datasource_name';
$user='database_username';
$password='database_password';

// Connect to the data source and get a handle for that connection.
$conn=odbc_connect($data_source,$user,$password);
if (!$conn){
    if (phpversion()  '4.0'){
      exit("Connection Failed: . $php_errormsg" );
    }
    else{
      exit("Connection Failed:" . odbc_errormsg() );
    }
}

// Retrieves table list.
$result = odbc_tables($conn);

   $tables = array();
   while (odbc_fetch_row($result))
     array_push($tables, odbc_result($result, "TABLE_NAME") );
// Begin table of names.
     echo "Table Count  Table Name\n";
# Create table rows with data.
   foreach( $tables as $tablename ) {
     $tablecount = $tablecount+1;
     echo "$tablecount            $tablename\n";
   }

// Disconnect the database from the database handle.
odbc_close($conn);
?>

The following section shows you how to create and call SQL Server procedures from PHP.

To use the sample script, you need a SQL Server database in which you can create and delete procedures. The data source that you specify in the scripts needs to connect to this database.

Here is a simple procedure that runs a SELECT statement and returns the results.

?php
/*
MSSQL PHP Example

Replace datasource_name with the name of your data source.
Replace database_username and database_password
with the SQL Server database username and password.
*/
  $data_source ='datasource_name';
  $user = 'database_username';
  $password = 'database_password';

// Connect to the data source and get a handle for that connection.
  $conn = odbc_connect($data_source,$user,$password,SQL_CUR_DEFAULT);
  if (!$conn){
    if (phpversion()  '4.0'){
    exit("Connection Failed: . $php_errormsg" );
    }
    else{
    exit("Connection Failed:" . odbc_errormsg());
    }
  }

// This procedure simply calls the select statement used in the initial code sample
  $sp = "CREATE PROCEDURE PROCEDURE_TEST AS
       SELECT 1 AS test_col";
// Prepare the statement
  $stmt = odbc_prepare($conn,$sp);
// Execute the statement.
  odbc_execute ($stmt);

  $callsp = "{call PROCEDURE_TEST}";
  $stmt = odbc_prepare($conn,$callsp);
  $parms = array();

  @odbc_execute ($stmt, $parms);

// Output the procedure's return value.
  odbc_result_all($stmt);

// Drop the precedure
  $dropsp = "DROP PROCEDURE PROCEDURE_TEST";
  $stmt = odbc_prepare($conn,$dropsp);

  odbc_execute ($stmt);
// Disconnect the database from the database handle.
  odbc_close($conn);
?>

The PHP Data Objects (PDO) extension provides an object oriented data access abstraction layer, which enables you to use the same PHP code to execute SQL queries, fetch data, and so on, regardless of which database you are using. PDO was initially released as an extension for PHP 5.0 on the PHP Extension Community Library (PECL). PDO is included in PHP 5.1+. Because PDO requires the object oriented features introduced in PHP 5.0, it will not work with earlier versions of PHP.

PDO supports:

  • Prepared statements and bound parameters.
  • Transactions.
  • Large objects (LOBs).
  • SQLState error codes.
  • Scrollable cursors.

The PDO architecture has two levels. The top level, PDO, provides a database independent interface for interacting with databases. The lower level consists of database-specific drivers, which translate between the top level interface and the relevant database interface (for example, ODBC or OCI). The PDO architecture insulates your PHP applications and scripts from database-specific details letting you switch from one database to another without having to change your PHP code.

The PDO_ODBC driver enables you to access ODBC databases via the PDO interface. PDO_ODBC supports the unixODBC Driver Manager, which it uses to load the ODBC driver for the target database. PDO_ODBC can be used with the SQL Server ODBC driver to enable PDO access to SQL Server from Linux and Unix platforms.

Installing the SQL Server ODBC Driver

You need to install the SQL Server ODBC driver on the machine where PHP is installed. For information about installing the SQL Server ODBC driver, see earlier in this tutorial.

Installing PDO and PDO_ODBC

We tested the SQL Server ODBC driver with PDO / PDO_ODBC using:

  • PHP 5.3.10 running both standalone and under Apache 2.2.22. (Installed from packages.)
  • PHP 5.4.5 running both standalone and under Apache 2.4.2. (Built form source.)

Installing from Packages

Most Linux distributions enable you to install PHP modules via their Package Managers (Synaptic, Yum and so on). When testing on Ubuntu Linux, we installed the following packages:

Package Notes
php5-cli Enables PHP scripts to be run standalone. Automatically supports PDO.
php5-odbc Includes the PDO_ODBC driver (and the Unified ODBC database extension). Installs PDO_ODBC as a shared object, which the package installer configures PHP to load automatically by adding an entry to php.ini.
libodbc1 The version of PDO_ODBC included in the php5-odbc package is built to support the unixODBC Driver Manager. The libodbc1 package contains the unixODBC libraries and is a dependent package of php5-odbc.
apache2-mpm-prefork Apache HTTP server. This is the non-threaded version as libapache2-mod-php5 is not compatible with the threaded version of Apache (apache2-mpm-worker).
libapache2-mod-php5 PHP module for Apache. Automatically supports PDO. Enables PHP to be run under Apache. The Apache HTTP server was automatically configured to load this module and use this module for pages with a .php or .phtml extension. No additional configuration was necessary.

Building from Source

By default, PDO is automatically built into the PHP 5.1+ binary, and so you do not need to configure the PHP build system to get PDO support.

To build PDO_ODBC, you need to include the --with-pdo-odbc option on the configure line. (For other configure options, type ./configure --help.) To use PDO_ODBC with the SQL Server ODBC driver, you need to build PDO_ODBC with unixODBC support. To do this, set the --with-pdo-odbc option's value to unixODBC.

To build PDO_ODBC with unixODBC support, PDO_ODBC needs to find the unixODBC libraries and header files. By default, the PHP build system expects unixODBC to be installed under /usr/local. The unixODBC Driver Manager included in the SQL Server ODBC driver distribution is installed under installation_dir/easysoft/unixODBC, where installation_dir is the Easysoft installation directory, by default, /usr/local. To build PDO_ODBC against this version of unixODBC (which is the one the SQL Server ODBC driver has been tested with), include this path in the --with-pdo-odbc option's value.

PDO_ODBC can be built as either a static (the default, which means that your PHP Apache module or PHP binary will be statically linked against PDO_ODBC) or a shared module. To build PDO_ODBC as a shared module, specify shared in the --with-pdo-odbc option's value.

In the following example, PDO_ODBC is built as a shared module against the unixODBC included in the SQL Server ODBC driver distribution:

# cd php-5.4.5
# ./configure --with-pdo-odbc=shared,unixODBC,/usr/local/easysoft/unixODBC
# make
# make install

Notes

  • If you build PDO_ODBC as a shared module, you need to update the php.ini file so that PDO_ODBC will be loaded automatically when PHP runs. To do this, add the following line to php.ini:
    extension=pdo_odbc.so
    

    If you do not have an existing php.ini file, the PHP function phpinfo() will report where PHP expects to find this configuration file.

  • If you want to use PDO_ODBC with PHP running under Apache, include the --with-apxs2 option on the configure line. Specify the directory where your Apache executables are located in --with-apxs2 option value. For example, --with-apxs2=/usr/local/apache2/bin/apxs.

    You also need to ensure that:

    • LoadModule php5_module modules/libphp5.so is uncommented in (or added to) httpd.conf.
    • AddType application/x-httpd-php .php .phtml is added to httpd.conf.

    For more information about building PHP as an Apache module, see Enabling ODBC support in PHP under Apache.

Connecting to SQL Server through PDO

To use the PDO interface to connect to SQL Server via ODBC, in your PHP script, call new PDO() to create a database handle object:

$dbh = new PDO(PDO_ODBC_DSN);

where PDO_ODBC_DSN has the following format:

odbc:DSN

–Or–

odbc:connection_string

You can either specify an ODBC DSN (defined in a file such as /etc/odbc.ini) or a DSN-less connection after the odbc: prefix. For example:

$dbh = new PDO('odbc:MY_MSSQL_DSN');

–Or–

$dbh = new PDO('odbc:DRIVER={Easysoft ODBC-SQL Server};SERVER=mymachine\sqlexpress;UID=mydomain\myuser;PWD=mypassword')

You can supply the user name and password as arguments in the PDO() call (for example, because you do not want to store them in odbc.ini):

$dbh = new PDO('odbc:MY_MSSQL_DSN', 'mydomain\myuser', 'mypassword');

You can also connect to a PDO_ODBC DSN defined in php.ini. If you specify just the PDO_ODBC DSN name in your PDO() call (with no prefix), PDO will look in php.ini for pdo.dsn.name. For example:

$dbh = new PDO('MSSQL');
; PDO_ODBC DSN defined in php.ini
pdo.dsn.MSSQL=odbc:MY_MSSQL_DSN

If your connection fails with the error Error!: could not find driver, use the phpinfo function to output the configure line for your version of PHP. If the configure line does not contain the --with-pdo-odbc option, PDO_ODBC is not installed. If the --with-pdo-odbc option value contains shared, check that php.ini is loading PDO_ODBC.

Example: How to Connect PDO_ODBC with SQL Server and Retrieve Data

?php
/*
PDO_ODBC MSSQL Example

Replace  with the name of your ODBC data source.

*/
$dsn ="odbc:";

try {

    // Connect to the data source and get a database handle for that connection.
    $dbh = new PDO($dsn);
    $stmt = $dbh->prepare("SELECT 1 AS test_col");
    $stmt->execute();
    while ($row = $stmt->fetch()) {
      print_r($row);
    }
    $stmt = NULL;
    $dbh = NULL;

} catch (PDOException $e) {
   echo "Failed to connect: " . $e->getMessage();
}
?>

Example: How to Retrieve SQL Server Procedure Output Parameters from PHP

A SQL Server stored procedure can return information by using either a RETURN statement or one or more output parameters. A RETURN statement enables a stored procedure to return an integer value, which reports the execution status of the procedure. Output parameters enable procedures to return other types of values, for example, character strings.

PDO, unlike the Unified ODBC extension, provides direct support for output parameters. This section contains an example that calls a stored procedure from PHP and retrieves an output parameter value. (To retrieve procedure output parameters by using the Unified ODBC extension a workaround is required.)

?php
/*
PDO_ODBC MSSQL Procedure Output Parameters Example

To run this example, specify the AdventureWorks sample database
when connecting to SQL Server. The user you specify for the
connection needs to be able to create procedures in this
database.

Replace  with the name of your ODBC data source.
*/
$dsn ="odbc:";

try {
    $dbh = new PDO($dsn);

    /*
    This procedure returns the year to date sales for a specified employee.
    The employee is specified with an input parameter. The YTD sales are
    returned with an output parameter.
    */
    $stmt = $dbh->prepare("CREATE PROCEDURE GetEmployeeSalesYTD
                         @SalesPerson nvarchar(50),
                         @SalesYTD money OUTPUT
                         AS
                         SELECT @SalesYTD = SalesYTD
                         FROM Sales.SalesPerson AS sp
                         JOIN HumanResources.vEmployee AS e
                         ON e.EmployeeID = sp.SalesPersonID
                         WHERE LastName = @SalesPerson");

    $stmt->execute();

    // The employee to return the YTD sales for.
    $inval = "Blythe";
    $outval = 0;

    $stmt = $dbh->prepare("{call GetEmployeeSalesYTD( ?, ? )}");

    $stmt->bindParam(1, $inval, PDO::PARAM_STR);

    /*
    To indicate that a parameter is an OUTPUT parameter, you must explicitly
    set the length.
    */
    $stmt->bindParam(2, $outval, PDO::PARAM_STR, 20);
    $stmt->execute();

    // Display the value of the output parameter.
    print "YTD sales for ".$inval." are ". $outval. ".";

    $stmt = $dbh->prepare("DROP PROCEDURE GetEmployeeSalesYTD");
    $stmt->execute();

    $stmt = NULL;
    $dbh = NULL;

} catch (PDOException $e) {
   echo "Failed to connect:" . $e->getMessage();
}
?>

The ODBC-ODBC Bridge is another solution from Easysoft that provides PHP to SQL Server connectivity from UNIX and Linux platforms.

The ODBC-ODBC Bridge is available on more platforms than our SQL Server ODBC driver.

The ODBC-ODBC Bridge is an ODBC driver for UNIX and Linux that accesses MS SQL Server by using the Windows MS SQL Server ODBC driver.

The components that you need to install on your client and server machines to provide ODBC access from PHP to Microsoft SQL Server data.

What You Need to Install

The ODBC-ODBC Bridge allows ODBC applications on one machine to access ODBC drivers on a remote machine.

The ODBC-ODBC Bridge consists of a client ODBC driver (which you install on the machine where PHP is running) and a server (which you install on a Windows machine where the Microsoft SQL Server ODBC driver is installed).

Refer to the following example to see what you need to install on your client and server machines:

  • Client Machine

    This is the machine you want to run PHP on. You need to have installed:

    • PHP The minimum version required.
    • The ODBC-ODBC Bridge Client The ODBC-ODBC Bridge Client is an ODBC driver that talks to the ODBC-ODBC Bridge Server and therefore your remote ODBC data source. You need to install the ODBC-ODBC Bridge Client and the unixODBC Driver Manager. ODBC-ODBC Bridge distributions include the unixODBC Driver Manager. There is no need to install the ODBC-ODBC Bridge Server on this machine. Refer to the ODBC-ODBC Bridge manual for installation instructions.
  • Server machine

    This is the machine where you have (or can install) an ODBC driver for the database you want to access. You need to have installed:

    • ODBC driver For this tutorial, you need the Microsoft SQL Server ODBC driver, and it is available in Microsoft Data Access Components (MDAC), the Microsoft SQL Server Native Client and the Microsoft SQL Server 2008 Native Client. You do not need install the MS SQL Server ODBC driver on the same machine as your SQL Server database.
    • The ODBC-ODBC Bridge Server. The ODBC-ODBC Bridge Server is an ODBC application, which accepts connections from the ODBC-ODBC Bridge Client and relays them to your target ODBC data source. You need to license the ODBC-ODBC Bridge Server, and trial licenses may be obtained during the installation. Refer to the ODBC-ODBC Bridge manual for installation instructions.

      In the following sections, we refer to the Server machine as windows_server.

Data Sources

An ODBC data source is a named resource that the application passes to the ODBC driver manager. The data source tells the driver manager which ODBC driver to load and which connection attributes to use.

With the ODBC-ODBC Bridge, there are two data sources to consider. The first data source is an ODBC-ODBC Bridge Client one on your client machine. This data source tells the driver manager to use the ODBC-ODBC Bridge Client and sets a number of attributes for the ODBC-ODBC Bridge Client. The attributes tell the ODBC-ODBC Bridge Client which server to connect to and which data source on the remote machine to use.

A typical ODBC-ODBC Bridge Client data source looks like this:

[mydatasource]
# Driver tells the driver manager which ODBC driver to use
Driver = ODBC-ODBC Bridge
# Description is a description of this data source
Description = connect to SQL Server on windows
# ServerPort is the name of the machine where the ODBC-ODBC Bridge Server is running
# and the port on which it is listening. The default port is 8888.
ServerPort = windows_server:8888

# LogonUser is a valid user account on the windows_server machine
# LogonAuth is LogonUser's password
LogonUser = my_windows_username
LogonAuth = LogonUsers_password

# TargetDSN is the name of the data source on windows_server to connect to
TargetDSN = windows_server_dsn
# TargetUser and TargetAuth are synonomous with the ODBC connection
# attributes UID and PWD and specify the user and password to use for
# the database login - if required.
#
TargetUser = db_username
TargetAuth = TargetUsers_password

We will describe these attributes in the following sections.

Note When using PHP, you do not need to specify TargetUser and TargetAuth in the data source, as these are passed in to the odbc_connect function.

Authentication

There are two levels of authentication you need to be aware of:

  1. ODBC-ODBC Bridge Server authentication

    By default, the ODBC-ODBC Bridge Server needs to authenticate the client and become the specified user on the windows_server machine. To do this, the ODBC-ODBC Bridge Client needs to specify the data source attributes LogonUser and LogonAuth. LogonUser is the name of a user who has permission to log on locally to the windows_server machine and LogonAuth is that user’s password. A user who has log on locally permissions is defined as a user who can log on at the console of windows_server. If LogonUser and LogonAuth are valid, the ODBC-ODBC Bridge Server becomes the LogonUser.

    Note You can turn off ODBC-ODBC Bridge Server authentication, but this has various implications (see the ODBC-ODBC Bridge manual).

  2. MS SQL Server authentication

    When you create a MS SQL Server data source in the Windows ODBC Administrator, you have the choice of:

    • With Integrated Windows authentication

      This is sometimes called trusted connections. In this situation, MS SQL Server examines the user on the Windows machine that is communicating with it and no SQL Server user name or password are required.

    • With SQL Server authentication

      In this scenario, MS SQL Server requires a database user name and password that your database administrator will have set up. If this is your situation, the ODBC connection attributes UID and PWD must be specified at the client end (you do this with the second and third arguments to odbc_connect).

This may be better explained with the aid of an example. Suppose you have an account on the windows_server machine and your username is Fred Bloggs and your password is mypassword. Your database administrator has set up the SQL Server instance with SQL Server authentication active and has set you up an account for the database with username dbuser and password dbpassword. To connect to this database, your ODBC-ODBC Bridge Client data source would like this:

[mydatasource]
# Driver tells the driver manager which ODBC driver to use
Driver = ODBC-ODBC Bridge
# Description is a description of this data source
Description = connect to SQL Server on windows

# ServerPort is the name of the machine where the ODBC-ODBC Bridge Server is running
# and the port on which it is listening. The default port is 8888.
ServerPort = windows_server:8888

# LogonUser is a valid user account on the windows_server machine
# LogonAuth is LogonUser's password
LogonUser = Fred Bloggs
LogonAuth = mypassword

# TargetDSN is the name of the data source on the windows_server to connect to
TargetDSN = windows_server_dsn
# TargetUser and TargetAuth are synonymous with the ODBC connection
# attributes UID and PWD and specify the user and password to use for
# the database login - if required.
#

Note When using PHP, you do not need to specify TargetUser and TargetAuth in the data source, as these will be passed in to the odbc_connect function.

In addition to setting up the ODBC-ODBC Bridge data source, your database user name and password have to be passed into the odbc_connect function within your PHP script. This is a typical odbc_connect connection string:

odbc_connect ( string dsn, string user, string password [, int cursor_type] )

When you use this function, you have to set string user to the user name you were given for the database and string password to the password for that user name. Using the same scenario as before, your odbc_connect call would look like:

odbc_connect ( "mydatasource", "dbuser", "dbpassword" )

ServerPort

The ServerPort attribute tells the ODBC-ODBC Bridge Client ODBC driver which server to connect to. ServerPort is the name or IP address of the server machine where the ODBC-ODBC Bridge Server Service is running and the port the Server is listening on. The port defaults to 8888 in the ODBC-ODBC Bridge Server configuration. This is not the port your database engine is listening on. Separate the server machine from the port with a colon (:) in the ServerPort attribute value. For example, windows_server:8888.

The ODBC-ODBC Bridge Server is configurable through an HTTP interface. Supposing your ODBC-ODBC Bridge Server is installed on windows.mycompany.local, you can access the ODBC-ODBC Bridge Server administration interface using the URL http://windows.mycompany.local:8890.

Note On Windows, the ODBC-ODBC Bridge Server installation sets the HTTP interface port to 8890, by default. This default setting can be changed during the ODBC-ODBC Bridge server installation and through the HTTP interface’s Configuration section.

TargetDSN

The TargetDSN attribute tells the ODBC-ODBC Bridge Client which data source on the remote server you want to access. This must be the name of a System data source as the ODBC-ODBC Bridge Server can only access System data sources. (To create a System data source, in the Microsoft ODBC Administrator, select the System DSN tab before clicking on Add).

Note For more information about creating a System DSN on Windows, see the ODBC-ODBC Bridge manual.

Установка на Ubuntu

Поддерживаются версии Ubuntu 16.04, 18.04 и 20.04.

Примечание

Чтобы установить PHP 7.4 или 7.3, замените 8.0 на 7.4 или 7.3 в следующих командах.

Шаг 1. Установка PHP (Ubuntu)

sudo su
add-apt-repository ppa:ondrej/php -y
apt-get update
apt-get install php8.0 php8.0-dev php8.0-xml -y --allow-unauthenticated

Шаг 2. Установка необходимых компонентов (Ubuntu)

Установите драйвер ODBC для Ubuntu, следуя инструкциям в статье Установка Microsoft ODBC Driver for SQL Server (Linux). Также обязательно установите дополнительный пакет unixodbc-dev. Он используется командой pecl для установки драйверов PHP.

Шаг 3. Установка драйверов PHP для Microsoft SQL Server (Ubuntu)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.0/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.0/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 8.0 sqlsrv pdo_sqlsrv

Если в системе только одна версия PHP, последний шаг можно упростить: phpenmod sqlsrv pdo_sqlsrv.

Шаг 4. Установка Apache и настройка загрузки драйвера (Ubuntu)

sudo su
apt-get install libapache2-mod-php8.0 apache2
a2dismod mpm_event
a2enmod mpm_prefork
a2enmod php8.0
exit

Шаг 5. Перезапуск Apache и тестирование примера скрипта (Ubuntu)

sudo service apache2 restart

Чтобы протестировать установку, воспользуйтесь разделом Тестирование установки в конце этого документа.

Установка в Ubuntu с PHP-FPM

Поддерживаются версии Ubuntu 16.04, 18.04 и 20.04.

Примечание

Чтобы установить PHP 7.4 или 7.3, замените 8.0 на 7.4 или 7.3 в следующих командах.

Шаг 1. Установка PHP (Ubuntu с PHP-FPM)

sudo su
add-apt-repository ppa:ondrej/php -y
apt-get update
apt-get install php8.0 php8.0-dev php8.0-fpm php8.0-xml -y --allow-unauthenticated

Проверьте состояние службы PHP-FPM, выполнив следующее:

systemctl status php8.0-fpm

Шаг 2. Установка необходимых компонентов (Ubuntu с PHP-FPM)

Установите драйвер ODBC для Ubuntu, следуя инструкциям в статье Установка Microsoft ODBC Driver for SQL Server (Linux). Также обязательно установите дополнительный пакет unixodbc-dev. Он используется командой pecl для установки драйверов PHP.

Шаг 3. Установка драйверов PHP для Microsoft SQL Server (Ubuntu с PHP-FPM)

sudo pecl config-set php_ini /etc/php/8.0/fpm/php.ini
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.0/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.0/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 8.0 sqlsrv pdo_sqlsrv

Если в системе только одна версия PHP, последний шаг можно упростить: phpenmod sqlsrv pdo_sqlsrv.

Убедитесь, что sqlsrv.ini и pdo_sqlsrv.ini находятся в /etc/php/8.0/fpm/conf.d/:

ls /etc/php/8.0/fpm/conf.d/*sqlsrv.ini

Перезапустите службу PHP-FPM:

sudo systemctl restart php8.0-fpm

Шаг 4. Установка и настройка nginx (Ubuntu с PHP-FPM)

sudo apt-get update
sudo apt-get install nginx
sudo systemctl status nginx

Чтобы настроить nginx, необходимо изменить файл /etc/nginx/sites-available/default. Добавьте index.php в список под разделом со следующим текстом: # Add index.php to the list if you are using PHP:

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;

Затем раскомментируйте и измените раздел после # pass PHP scripts to FastCGI server следующим образом:

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.0-fpm.sock;
}

Шаг 5. Перезапуск nginx и тестирование примера скрипта (Ubuntu с PHP-FPM)

sudo systemctl restart nginx.service

Чтобы протестировать установку, воспользуйтесь разделом Тестирование установки в конце этого документа.

Установка в Red Hat

Поддерживаются версии Red Hat 7 и 8.

Шаг 1. Установка PHP (Red Hat)

Чтобы установить PHP в Red Hat 7, выполните следующие команды:

Примечание

Чтобы установить PHP 7.4 или 7.3, замените remi-php80 строкой remi-php74 или remi-php73 соответственно в следующих командах.

sudo su
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms
yum install yum-utils
yum-config-manager --enable remi-php80
yum update
# Note: The php-pdo package is required only for the PDO_SQLSRV driver
yum install php php-pdo php-xml php-pear php-devel re2c gcc-c++ gcc

Чтобы установить PHP в Red Hat 8, выполните следующие команды:

Примечание

Чтобы установить PHP 7.4 или 7.3, замените remi-8.0 на remi-7.4 или remi-7.3 соответственно в следующих командах.

sudo su
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf install yum-utils
dnf module reset php
dnf module install php:remi-8.0
subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
dnf update
# Note: The php-pdo package is required only for the PDO_SQLSRV driver
dnf install php-pdo php-pear php-devel

Шаг 2. Установка необходимых компонентов (Red Hat)

Установите драйвер ODBC для Red Hat 7 или 8, следуя инструкциям в статье Установка Microsoft ODBC Driver for SQL Server (Linux). Также обязательно установите дополнительный пакет unixodbc-dev. Он используется командой pecl для установки драйверов PHP.

Шаг 3. Установка драйверов PHP для Microsoft SQL Server (Red Hat)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini
exit

Можно также установить их из репозитория Remi:

sudo yum install php-sqlsrv

Шаг 4. Установка Apache (Red Hat)

sudo yum install httpd

SELinux устанавливается по умолчанию и выполняется в принудительном режиме. Чтобы разрешить Apache подключаться к базам данных через SELinux, выполните следующую команду:

sudo setsebool -P httpd_can_network_connect_db 1

Шаг 5. Перезапуск Apache и тестирование примера скрипта (Red Hat)

sudo apachectl restart

Чтобы протестировать установку, воспользуйтесь разделом Тестирование установки в конце этого документа.

Установка в Debian

Поддерживаются версии Debian 9 и 10.

Примечание

Чтобы установить PHP 7.4 или 7.3, замените 8.0 на 7.4 или 7.3 в следующих командах.

Шаг 1. Установка PHP (Debian)

sudo su
apt-get install curl apt-transport-https
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt-get update
apt-get install -y php8.0 php8.0-dev php8.0-xml php8.0-intl

Шаг 2. Установка необходимых компонентов (Debian)

Установите драйвер ODBC для Debian, следуя инструкциям в статье Установка Microsoft ODBC Driver for SQL Server (Linux). Также обязательно установите дополнительный пакет unixodbc-dev. Он используется командой pecl для установки драйверов PHP.

Кроме того, может потребоваться создать правильный языковой стандарт, чтобы выходные данные PHP правильно отображались в браузере. Например, для языкового стандарта en_US UTF-8 выполните следующие команды:

sudo su
sed -i 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
locale-gen

Может потребоваться добавить /usr/sbin в $PATH, так как там находится исполняемый файл locale-gen.

Шаг 3. Установка драйверов PHP для Microsoft SQL Server (Debian)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.0/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.0/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 8.0 sqlsrv pdo_sqlsrv

Если в системе только одна версия PHP, последний шаг можно упростить: phpenmod sqlsrv pdo_sqlsrv. Как и в случае с locale-gen, phpenmod находится в /usr/sbin, поэтому может потребоваться добавить этот каталог в $PATH.

Шаг 4. Установка Apache и настройка загрузки драйвера (Debian)

sudo su
apt-get install libapache2-mod-php8.0 apache2
a2dismod mpm_event
a2enmod mpm_prefork
a2enmod php8.0

Шаг 5. Перезапуск Apache и тестирование примера скрипта (Debian)

sudo service apache2 restart

Чтобы протестировать установку, воспользуйтесь разделом Тестирование установки в конце этого документа.

Установка в Suse

Поддерживаются версии Suse Enterprise Linux 12 и 15.

Примечание

В следующих инструкциях замените на свою версию SUSE. Если вы используете SUSE Enterprise Linux 15, это будет SLE_15_SP1 или SLE_15_SP2. Для SUSE 12 используйте SLE_12_SP4 (или выше, если применимо). Не все версии PHP доступны для всех версий SUSE Linux. В http://download.opensuse.org/repositories/devel:/languages:/php указано, какие версии SUSE имеют доступную версию PHP по умолчанию, а в http://download.opensuse.org/repositories/devel:/languages:/php:/ — какие еще версии PHP доступны для разных версий SUSE.

Примечание

Пакеты для PHP 7.4 или более поздней версии недоступны для SUSE 12, а пакет для PHP 8.0 пока не доступен для SUSE 15. Чтобы установить PHP 7.3, замените URL-адрес репозитория в команде ниже следующим URL-адресом: https://download.opensuse.org/repositories/devel:/languages:/php:/php73//devel:languages:php:php73.repo.

Шаг 1. Установка PHP (Suse)

sudo su
zypper -n ar -f https://download.opensuse.org/repositories/devel:languages:php//devel:languages:php.repo
zypper --gpg-auto-import-keys refresh
zypper -n install php7 php7-devel php7-openssl

Шаг 2. Установка необходимых компонентов (Suse)

Установите драйвер ODBC для SUSE, следуя инструкциям в статье Установка Microsoft ODBC Driver for SQL Server (Linux). Также обязательно установите дополнительный пакет unixodbc-dev. Он используется командой pecl для установки драйверов PHP.

Шаг 3. Установка драйверов PHP для Microsoft SQL Server (Suse)

Примечание

Если вы получаете сообщение об ошибке вида Connection to 'pecl.php.net:443' failed: Unable to find the socket transport "ssl", измените скрипт pecl в папке /usr/bin/pecl, удалив аргумент -n в последней строке. Этот аргумент запрещает PECL загружать ini-файлы при вызове PHP, что мешает загрузить расширение OpenSSL PECL.

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/sqlsrv.ini
exit

Шаг 4. Установка Apache и настройка загрузки драйвера (Suse)

sudo su
zypper install apache2 apache2-mod_php7
a2enmod php7
echo "extension=sqlsrv.so" >> /etc/php7/apache2/php.ini
echo "extension=pdo_sqlsrv.so" >> /etc/php7/apache2/php.ini
exit

Шаг 5. Перезапуск Apache и тестирование примера скрипта (Suse)

sudo systemctl restart apache2

Чтобы протестировать установку, воспользуйтесь разделом Тестирование установки в конце этого документа.

Установка в Alpine

Поддерживаются версии Alpine 3.11 и 3.12.

Примечание

Версия PHP по умолчанию — 7.3. Версия PHP 7.4 или более поздняя может быть доступна в тестовых или пограничных репозиториях для Alpine. Вместо этого можно скомпилировать PHP из источника.

Шаг 1. Установка PHP (Alpine)

Пакеты PHP для Alpine находятся в репозитории edge/community. Проверьте раздел Включить репозиторий сообщества на их вики-странице. Добавьте следующую строку в /etc/apk/repositories, заменив на URL-адрес зеркального отображения репозитория Alpine:

http:///alpine/edge/community

Далее выполните:

sudo su
apk update
# Note: The php7-pdo package is required only for the PDO_SQLSRV driver
apk add php7 php7-dev php7-pear php7-pdo php7-openssl autoconf make g++

Шаг 2. Установка необходимых компонентов (Alpine)

Установите драйвер ODBC для Alpine, следуя инструкциям в статье Установка Microsoft ODBC Driver for SQL Server (Linux). Также обязательно установите пакет unixodbc-dev (sudo apk add unixodbc-dev). Он используется командой pecl для установки драйверов PHP.

Шаг 3. Установка драйверов PHP для Microsoft SQL Server (Alpine)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/10_pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/00_sqlsrv.ini

Шаг 4. Установка Apache и настройка загрузки драйвера (Alpine)

sudo apk add php7-apache2 apache2

Шаг 5. Перезапуск Apache и тестирование примера скрипта (Alpine)

sudo rc-service apache2 restart

Чтобы протестировать установку, воспользуйтесь разделом Тестирование установки в конце этого документа.

Установка в macOS

Поддерживаются версии MacOS 10.14 (Mojave), 10.15 (Catalina) и 11.0 (Big Sur).

Установите brew, как описано ниже, если у вас ее еще нет:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Примечание

Чтобы установить PHP 7.4 или 7.3, замените php@8.0 на php@7.4 или php@7.3 соответственно в следующих командах.

Шаг 1. Установка PHP (macOS)

brew tap
brew tap homebrew/core
brew install php@8.0

PHP теперь должен быть указан в пути. Запустите php -v и убедитесь, что используется правильная версия PHP. Если в пути нет PHP или есть PHP неправильной версии, выполните следующие команды:

brew link --force --overwrite php@8.0

Шаг 2. Установка необходимых компонентов (macOS)

Установите драйвер ODBC для macOS, следуя инструкциям в статье Установка Microsoft ODBC Driver for SQL Server (macOS).

Кроме того, может потребоваться установить средства make для GNU:

brew install autoconf automake libtool

Шаг 3. Установка драйверов PHP для Microsoft SQL Server (macOS)

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv

Шаг 4. Установка Apache и настройка загрузки драйвера (macOS)

brew install apache2

Чтобы найти файл конфигурации Apache (httpd.conf) для установки Apache, выполните следующую команду:

/usr/local/bin/apachectl -V | grep SERVER_CONFIG_FILE

Следующие команды добавляют необходимую конфигурацию в httpd.conf. Не забудьте указать путь, возвращенный предыдущей командой, вместо /usr/local/etc/httpd/httpd.conf:

echo "LoadModule php7_module /usr/local/opt/php@8.0/lib/httpd/modules/libphp7.so" >> /usr/local/etc/httpd/httpd.conf
(echo ""; echo "SetHandler application/x-httpd-php"; echo "";) >> /usr/local/etc/httpd/httpd.conf

Шаг 5. Перезапуск Apache и тестирование примера скрипта (macOS)

sudo apachectl restart

Чтобы протестировать установку, воспользуйтесь разделом Тестирование установки в конце этого документа.

Тестирование установки

Чтобы протестировать этот пример скрипта, создайте файл с именем testsql.php в корневом каталоге документов системы. Это путь /var/www/html/ в Ubuntu, Debian и Red Hat, /srv/www/htdocs в Suse, /var/www/localhost/htdocs в Alpine и /usr/local/var/www в macOS. Скопируйте приведенный ниже скрипт, заменив имя сервера, имя базы данных, имя пользователя и пароль правильными значениями.

Пример SQLSRV

 "yourDatabase",
    "uid" => "yourUsername",
    "pwd" => "yourPassword"
);

function exception_handler($exception) {
    echo "

Failure

"; echo "Uncaught exception: " , $exception->getMessage(); echo "

PHP Info for troubleshooting

"; phpinfo(); } set_exception_handler('exception_handler'); // Establishes the connection $conn = sqlsrv_connect($serverName, $connectionOptions); if ($conn === false) { die(formatErrors(sqlsrv_errors())); } // Select Query $tsql = "SELECT @@Version AS SQL_VERSION"; // Executes the query $stmt = sqlsrv_query($conn, $tsql); // Error handling if ($stmt === false) { die(formatErrors(sqlsrv_errors())); } ?>

Success Results :

SQL Error:"; echo "Error information:
"; foreach ($errors as $error) { echo "SQLSTATE: ". $error['SQLSTATE'] . "
"; echo "Code: ". $error['code'] . "
"; echo "Message: ". $error['message'] . "
"; } } ?>

Пример PDO_SQLSRV

query($tsql);
} catch (PDOException $exception1) {
    echo "

Caught PDO exception:

"; echo $exception1->getMessage() . PHP_EOL; echo "

PHP Info for troubleshooting

"; phpinfo(); } ?>

Success Results :

fetch(PDO::FETCH_ASSOC)) { echo $row['SQL_VERSION'] . PHP_EOL; } } catch (PDOException $exception2) { // Display errors echo "

Caught PDO exception:

"; echo $exception2->getMessage() . PHP_EOL; } unset($stmt); unset($conn); ?>

Перейдите в браузере на страницу https://localhost/testsql.php (https://localhost:8080/testsql.php в Mac OS). Теперь вы сможете подключиться к базе данных SQL Server или SQL Azure. Если вы не видите сообщение об успешном выполнении с информацией о версии SQL, выполните основные действия по устранению неполадок, запустив скрипт из командной строки:

php testsql.php

Если выполнение из командной строки прошло успешно, но в браузере ничего не отображается, проверьте файлы журнала Apache. Если потребуется дополнительная поддержка, см. места, где можно найти необходимую информацию, в разделе Ресурсы поддержки.

ODBC connector

Для начала мы должны установить ODBC connector. Нам понадобиться скачать на наш сервер архив, поэтому сначала инсталлируем wget.

а) на CentOS / Red Hat:

yum install wget

б) на Ubuntu / Debian:

apt-get install wget

После установки wget перейдем в каталог /tmp:

cd /tmp

Открываем браузер и заходим на страницу загрузки коннекторов MariaDB и выбираем ODBC connector, а также нашу операционную систему, например:

* в данном случае мы загрузим коннектор для CentOS 8.

Ниже на этой же страницы мы увидим ссылку на скачивание нужного нам коннектора. Копируем данную ссылку:

С помощью wget и скопированной ссылки загружаем на сервер коннектор:

wget https://dlm.mariadb.com/1269825/Connectors/odbc/connector-odbc-3.1.10/mariadb-connector-odbc-3.1.10-centos8-amd64.tar.gz

Распаковываем его:

tar zxvf mariadb-connector-odbc-*.tar.gz

И копируем библиотеки в каталог /usr/lib64:

cp mariadb-connector-odbc-*-amd64/lib64/mariadb/lib* /usr/lib64/

После скачанный архив и распакованный каталог можно удалить:

rm -rf mariadb-connector-odbc-*

Установка и подготовка к работе СУБД

Для проверки настройки нам нужен сервер баз данных. Если его нет, то установим mariadb-server на тот же сервер, где и развернули ODBC.

а) для CentOS / Red Hat:

yum install mariadb-server

б) для Ubuntu / Debian:

apt-get install mariadb-server

После установки запускаем сервис и настраиваем его на автозапуск:

systemctl enable mariadb --now

Задаем пароль для суперпользователя:

mysqladmin -u root password

Заходим в консоль SQL:

mysql -uroot -p

Создаем новую базу данных:

> CREATE DATABASE my_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* для наших тестов мы создали базу с названием my_db.

Дадим права на подключение и работу с созданной базой данных:

> GRANT ALL PRIVILEGES ON my_db.* TO 'odbc_user'@'localhost' IDENTIFIED BY 'odbc_password';

* данной командой мы разрешили доступ к базе my_db пользователю odbc_user, который будет подключаться с локального компьютера и паролем odbc_password.

Подключаемся к созданной базе данных:

> use my_db;

Создаем простенькую таблицу:

> CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(512) NOT NULL,
  `rights` varchar(64) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

* наша созданная таблица будет состоять из 3 столбцов — idname и rights.

Добавим 3 строки в нашу таблицу:

> INSERT INTO users (`name`, `rights`) VALUES ('Дмитрий', 'admin'), ('Оля', 'superuser'), ('Антон' ,'operator');

Готово. Теперь выходим из sql-оболочки:

> quit

Установка и настройка ODBC

Устанавливаем сам ODBC.

а) для CentOS / Red Hat:

yum install unixODBC

б) для Ubuntu / Debian:

apt-get install unixodbc odbcinst

Открываем конфигурационный файл:

vi /etc/odbcinst.ini

Проверяем наличие следующей записи (если ее нет, добавляем):

...
[MariaDB]
Description     = ODBC for MariaDB
Driver          = /usr/lib/libmaodbc.so
Driver64        = /usr/lib64/libmaodbc.so
FileUsage       = 1
...

* в данном примере описано подключение к СУБД с драйвером MariaDB и путем до файла с библиотекой (отдельно для 32- и 64-разрядной версии).

Открываем файл:

vi /etc/odbc.ini

Добавляем DSN для подключения к нашему серверу и базе, которую создавали на предыдущем этапе:

[ODBC]
Driver = MariaDB
USER = odbc_user
PASSWORD = odbc_password
Server = 127.0.0.1
Database = my_db
Port = 3306

* где:

  • ODBC — произвольное название для нашего подключения.
  • Driver — драйвер, который мы будем использовать. Его мы описали в файле /etc/odbcinst.ini.
  • USER — пользователь, под которым будем подключаться к базе. Используем данные для ранее созданной учетной записи в mariadb.
  • PASSWORD — пароль для созданного ранее пользователя, под которым мы будем подключаться к базе.
  • Server — сервер баз данных. В нашем примере локальный сервер.
  • Database — имя созданной базы данных.
  • Port — порт, на котором слушает сервер. 3306 используется по умолчанию для MariaDB.

Пробуем подключиться к базе с использованием ODBC:

isql -v ODBC

* где ODBC — название для подключения, которое мы задали на предыдущем шаге.

Мы должны увидеть командную строку для ввода команд sql — пробуем получить данные из нашей таблицы users:

> select * from users;

Мы должны увидеть что-то на подобие:

+----+--------------+----------------+
| id |     name     |     rights     |
+----+--------------+----------------+
| 1  |   Дмитрий    |      admin     |
| 2  |     Оля      |    superuser   |
| 3  |    Антон     |    operator    |
+----+--------------+----------------+

Можно выходить из sql-оболочки:

> quit

Настройка php

Теперь настроим подключение из php. Мы рассмотрим 2 способа подключения — с помощью odbc_connect и PDO. 

Предварительно, создадим каталог, в который разместим тестовый скрипт для подключения к базе:

mkdir -p /var/www/php

odbc_connect

Ставим расширение php-odbc (а также сам php, если его нет на сервере).

а) для CentOS / Red Hat:

yum install php php-odbc

б) для Ubuntu / Debian:

apt-get install php php-odbc

После установки создадим скрипт для проверки подключения:

vi /var/www/php/db.php

    $driver = "DRIVER=MariaDB";
    $server = "127.0.0.1";
    $db_name = "my_db";
    $port = "3306";
    $user = "odbc_user";
    $password = "odbc_password";
    $ocon = odbc_connect("{$driver};Server={$server};Database={$db_name};Port={$port};String Types=Unicode", $user, $password);

    $result = odbc_exec($ocon, "SELECT * FROM users LIMIT 10");
    while ($mass = odbc_fetch_array ($result)) {
        print_r($mass);
    }

    odbc_close($ocon);

?>

* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.

Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью odbc_connect может ссылаться для соединения на него. Итого, получаем:

    $ocon = odbc_connect("ODBC", "odbc_user", "odbc_password");

    $result = odbc_exec($ocon, "SELECT * FROM users LIMIT 10");
    while ($mass = odbc_fetch_array ($result)) {
        print_r($mass);
    }

    odbc_close($ocon);

?>

* обратите внимание, что мы передаем функции odbc_connect только 3 параметра для подключения:

  1. ODBC — название для нашего DSN.
  2. odbc_user — имя пользователя для подключения к базе данных.
  3. odbc_password — пароль для подключения к базе.

PDO

Ставим расширение php-pdo (а также сам php, если его нет на сервере).

а) для CentOS / Red Hat:

yum install php php-pdo

б) для Ubuntu / Debian:

apt-get install php php-pdo

После установки создадим скрипт для проверки подключения:

vi /var/www/php/db.php

    $pcon = new PDO("odbc:Driver=MariaDB;Server=127.0.0.1;Database=my_db;","odbc_user","odbc_password");
 
    try {
        $result = $pcon->query("SELECT * FROM users LIMIT 10");
        $mass = $result->fetchAll(PDO::FETCH_ASSOC);
        print_r($mass);
    } catch (Exception $e){
        throw new PDOException(var_export($pcon->errorInfo(),true));
    }

?>

* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.

Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью PDO может ссылаться для соединения на него. Итого, получаем:

    $pcon = new PDO("odbc:ODBC","odbc_user","odbc_password");

    try {
        $result = $pcon->query("SELECT * FROM users LIMIT 10");
        $mass = $result->fetchAll(PDO::FETCH_ASSOC);
        print_r($mass);
    } catch (Exception $e){
        throw new PDOException(var_export($pcon->errorInfo(),true));
    }

?>

* обратите внимание, что мы передаем функции PDO только 3 параметра для подключения:

  1. odbc:ODBC — способ соединения с базой и название для нашего DSN.
  2. odbc_user — имя пользователя для подключения к базе данных.
  3. odbc_password — пароль для подключения к базе.

Проверка запроса

После того, как мы создали скрипт проверки любым из вышеописанных способов, запускаем его на исполнение:

php /var/www/php/db.php

Мы должны получить следующий результат:

Array
(
    [id] => 1
    [name] => Дмитрий
    [rights] => admin
)
Array
(
    [id] => 2
    [name] => Оля
    [rights] => superuser
)
Array
(
    [id] => 3
    [name] => Антон
    [rights] => operator
)

Подключение к MariaDB с помощью ODBC настроено.

Возможные ошибки

Call to undefined function odbc_connect()

Возникает при попытке запустить скрипт, который подключается к базе с помощью функции odbc_connect.

Причина: для нашей версии php не установлено расширение php-odbc.

Решение: команда для установки зависит от используемого типа дистрибутива Linux.

а) для CentOS / Red Hat:

yum install php-odbc

б) для Ubuntu / Debian:

apt-get install php-odbc

Проверить, что нужное расширение установлено можно командой:

php -i | grep odbc

Скачивание

Microsoft Drivers 5.9 для PHP для SQL Server — это последняя общедоступная версия.

Скачать Скачать Microsoft Drivers для PHP для SQL Server (Windows)
Тег выпуска GitHub 5.9.0 (пакеты Linux и macOS доступны здесь)

Сведения о версии

  • Номер выпуска: 5.9.0
  • Выпущено: 29 января 2021 г.

Если вы хотите оставить отзыв, лучше всего обратиться к команде Microsoft Drivers Майкрософт для PHP для SQL Server, создав проблему в репозитории GitHub.

Заметки о выпуске

См. сведения о новых возможностях в этом выпуске в заметках о выпуске SSMS.

Предыдущие выпуски

Эта страница описывает возможности только последней версии Microsoft Drivers для PHP. Чтобы скачать предыдущие версии, см. страницу с предыдущими выпусками Microsoft Drivers для PHP для SQL Server.

Инструмент для работы с Microsoft SQL Server из Linux

Как известно, Microsoft SQL Server, начиная с 2017 версии, можно установить на Linux.

Заметка! Описание процесса установки Microsoft SQL Server на Linux.

Однако основной инструмент для работы с SQL Server, т.е. SQL Server Management Studio, реализован только под Windows. Иными словами, SSMS не получится использовать в Linux, чтобы подключиться к SQL Server и осуществлять разработку баз данных. Это возможно, только если Management Studio установлена на Windows.

При этом операционная система Linux набрала определенную популярность и некоторые организации даже используют Linux в качестве клиентской операционной системы, таким образом, возникла необходимость в инструменте, который позволял бы подключаться к Microsoft SQL Server из Linux и полноценно работать с базами данных.

Компания Microsoft дала нам такой инструмент – это Azure Data Studio.

Azure Data Studio – это бесплатный кроссплатформенный инструмент с открытым исходным кодом для работы с базами данных Microsoft SQL Server.

Более подробно о том, что это за инструмент, для чего он создан, каким функционалом он обладает, я рассказывал в отдельной статье – Обзор Azure Data Studio.

Таким образом, основным инструментом для работы с Microsoft SQL Server, если у нас установлена операционная система Linux, будет именно Azure Data Studio.