2017-10-12 177 views
0

我安装了Apache 2.4和PHP 7,并且在AWS上的Amazon Linux AMI上正常工作。从PHP,我可以很好地连接到MySQL数据库,但现在我需要连接到SQL Server数据库。如何在AWS Amazon Linux EC2实例上从PHP 7连接到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现在看起来如下:

enter image description here

我没有重新启动Apache为好,但我仍然得到上面提到的错误用上面提到的代码。

因此,我不认为这是在评论部分链接的问题的重复。

+0

[PDOException“找不到驱动程序”的可能重复](https://stackoverflow.com/questions/2852748/pdoexception-could-not-find-driver) – miken32

回答

0

我想通了。您实际上必须安装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(); 

} 
0

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

按照此页面上的说明:

MSPHPSQL