【问题标题】:How to do I connect to a SQL Server instance from PHP 7 on an AWS Amazon Linux EC2 instance?如何在 AWS Amazon Linux EC2 实例上从 PHP 7 连接到 SQL Server 实例?
【发布时间】:2018-03-24 18:44:24
【问题描述】:

我已安装 Apache 2.4 和 PHP 7,并且在 AWS 上的 Amazon Linux AMI 上运行良好。通过 PHP,我可以很好地连接到 MySQL 数据库,但现在我需要连接到 SQL Server 数据库。

我该怎么做?我需要编写什么 PHP 代码,是否需要安装额外的 PHP 包/模块来执行此操作?我已经安装了 PDO 并尝试使用它,但是下面的代码会抛出以下错误:

$dsn = 'sqlsrv:dbname=db-name;host=aws-endpoint.rds.amazonaws.com';
$user = 'user-name';
$password = 'password';
$dbh = new PDO($dsn, $user, $password);

错误:

PHP Fatal error:  Uncaught PDOException: could not find driver in /var/www/html/php-script-name.php

编辑:稍微补充一下我的问题,我从 EC2 实例运行 yum search pdo 并得到以下信息:

Loaded plugins: priorities, update-motd, upgrade-helper
============================================================================================================= N/S matched: pdo ==============================================================================================================
php-ZendFramework-Db-Adapter-Pdo.noarch : Zend Framework database adapter for PDO
php-ZendFramework-Db-Adapter-Pdo-Mssql.noarch : Zend Framework database adapter for MS SQL PDO
php-ZendFramework-Db-Adapter-Pdo-Mysql.noarch : Zend Framework database adapter for MySQL PDO
php-ZendFramework-Db-Adapter-Pdo-Pgsql.noarch : Zend Framework database adapter for PgSQL PDO
php70-pdo-dblib.x86_64 : PDO driver Microsoft SQL Server and Sybase databases
php71-pdo-dblib.x86_64 : PDO driver Microsoft SQL Server and Sybase databases
php-pdo.x86_64 : A database access abstraction module for PHP applications
php54-pdo.x86_64 : A database access abstraction module for PHP applications
php55-pdo.x86_64 : A database access abstraction module for PHP applications
php56-pdo.x86_64 : A database access abstraction module for PHP applications
php70-pdo.x86_64 : A database access abstraction module for PHP applications
php71-pdo.x86_64 : A database access abstraction module for PHP applications

  Name and summary matches only, use "search all" for everything.

似乎php70-pdo-dblib.x86_64 是我想要的插件,所以我在上面运行了yum install,我的phpinfo 现在如下所示:

我也确实重新启动了 Apache,但我仍然收到上面提到的错误,上面提到的代码。

因此,我不认为这与 cmets 部分中链接的问题重复。

【问题讨论】:

标签: php sql-server amazon-web-services amazon-ec2 php-7


【解决方案1】:

我想通了。实际上,您必须安装 php70-pdo-dblib 并重新启动服务器。但是,我的 $dbn 字符串已关闭。具体来说,需要将sqlsrv 更改为dblib,并将端口号:1433 添加到host 部分的末尾。

因此,以下代码有效:

$dsn = 'dblib:host=aws-endpoint.rds.amazonaws.com:1433;dbname=db-name;';
$user = 'user-name';
$password = 'password';

try {

  $dbh = new PDO($dsn, $user, $password);

  $result = $dbh->query("SELECT * 
    FROM table-name;");

  foreach ($result as $row) {
    echo '<pre>';
      print_r($row);
    echo '</pre>';
  }

} catch (PDOException $e) {

  echo 'Connection failed: ' . $e->getMessage();

}

【讨论】:

    【解决方案2】:

    您需要安装 Microsoft SQL PHP 驱动程序。

    按照此页面上的说明进行操作:

    MSPHPSQL

    【讨论】:

      【解决方案3】:

      按照Microsoft 的官方指南,当您安装 unixODBC 时,请参阅此页面以构建 RPM 并安装它:

      https://github.com/EreMaijala/unixODBC

      【讨论】:

        猜你喜欢
        • 2019-04-03
        • 1970-01-01
        • 2018-11-28
        • 2019-12-04
        • 2014-09-22
        • 1970-01-01
        • 2016-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多