PHP Sql Server PDOException:找不到驱动程序

9
我的服务器是 Windows 2008 服务器。已安装并运行 PHP 版本为 7.2.7。已安装 Sql Server 11 (64 位) 并正常运行(已有几个 asp.net 应用程序在使用该数据库)。 我从 Microsoft 网站下载了 PHP Sql Server 驱动程序,并将 .dll 文件放置在 PHP 扩展目录中。 在我的 PHP.ini 文件中,我添加了:extension=php_pdo_sqlsrv_7_nts_x64 在我用于测试数据库连接的 .php 文件中,我使用了以下代码:
 $SqlServer = "THISSERVER\SQLEXPRESS";
 $SqlServerCon = new PDO("sqlsrv:server=$SqlServer;Database=TheDatabase", "DbUName", "DbPassword"); 
if (!$SqlServerCon) {die('Unable To Connect to Sql Server');}
else
{echo "Connection Successful";}     

我遇到了以下问题:

PHP致命错误:在D:\ Inetpub \ wwwroot \ TechStory2 \ DBtest.php的第7行未捕获的PDOException:找不到驱动程序(第7行是$SqlServerCon行)。

我做错了什么?需要怎么做才能连接到Sql Server?


3
我认为你需要在“ini”文件的扩展名末尾加上“.dll”。记得在更改后重新启动 Web 服务器。 - delboy1978uk
@delboy1978uk所说的。在Windows上,我们假设您没有从源代码编译,并且PDO扩展(php_pdo.dll)已经构建到您的二进制文件中。如果没有,请确保在SQLSRV之前加载它。 - ficuscr
2个回答

5
我已经弄清楚了。我必须在服务器上安装SQL Server的ODBC Driver 17 (msodbcsql_17.2.0.1_x64.msi)。安装了SQL Server Native Client 11.0,但没有安装ODBC Driver for SQL Server。 供其他遇到类似问题的人以后参考... 它可以在https://www.microsoft.com/en-us/download/details.aspx?id=56567下载(注意:如果您有32位服务器,您将需要安装msodbcsql_17.2.0.1_x86.msi-如果您意外尝试安装不正确的版本,它会在安装过程中通知您)。驱动程序安装后,您需要重新启动服务器。它不会提示您重新启动,但您需要这样做。
在我的PHP.ini中,我已添加了extension=php_pdo_sqlsrv_72_nts.dllextension=php_sqlsrv_72_nts_x64.dll,它们可以在https://learn.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?view=sql-server-2017下载。
更多信息可以在https://learn.microsoft.com/en-us/sql/connect/php/loading-the-php-sql-driver?view=sql-server-2017https://learn.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?view=sql-server-2017找到。
现在我可以使用sqlsrv_connect或PDO连接到Sql Server。

PDO连接测试:

$SqlServer = "THISSERVER\SQLEXPRESS";
$SqlServerCon = new PDO("sqlsrv:server=$SqlServer;Database=TheDatabase", "DbUName", "DbPassword"); 
if (!$SqlServerCon) {die('Unable To Connect to Sql Server');}
else
{echo "Connection Successful";} 

sqlsrv_connect连接测试:

$SqlServer = "THISSERVER\SQLEXPRESS";
$DbConnInfo = array( "Database"=>"TheDatabase", "UID"=>"DbUName", "PWD"=>"DbPassword");
$SqlServerCon = sqlsrv_connect( $SqlServer, $DbConnInfo);
if( $SqlServerCon ) {echo "Connection established";}
else
{echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));}

还有来自微软的新库 https://github.com/Microsoft/msphpsql/tree/PHP-7.0 - kallosz
我能澄清一下你在这里说的话吗?(a) SQL服务器是否与您的Web服务器位于同一台机器上?(b) 除了其他驱动程序之外,您是否还需要安装ODBC驱动程序? - Manngo

0
正如评论者所说 - 在extension=配置行的末尾添加.dll应该是解决您问题的好开始。
我还可以看到您正在尝试加载扩展的NTS版本(NTS代表非线程安全)。 您确定要加载正确版本的扩展吗? 请检查您是否将PHP作为NTS运行时运行 - 您可以使用phpinfo();进行检查。

是的,因为我在Windows服务器上使用fastcgi。 - Soren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接