2017-10-12 178 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