PHP Sql 服务器 PDOException:could 找不到驱动程序

PHP Sql Server PDOException:could not find driver

我的服务器是 Windows 2008 服务器。 PHP 版本 7.2.7 已安装并且 运行。 Sql 服务器 11(64 位)已安装并正在运行(有几个 asp.net 应用程序 运行 并且已经在使用该数据库)

我从微软网站下载了 PHP Sql 服务器驱动程序,并将 .dll 文件放在 PHP ext 目录中。

在我的 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 Fatal error: Uncaught PDOException: could not find driver in D:\Inetpub\wwwroot\TechStory2\DBtest.php:7(第 7 行是 $SqlServerCon 行)。

我做错了什么?以及我需要做什么才能连接到 Sql 服务器?

正如评论员所说 - 在 extension= 配置行的末尾添加 .dll 应该是解决您的问题的良好开端。

我还看到您正在尝试加载 NTS 版本的扩展(NTS 代表非线程安全)。您确定要加载正确版本的扩展吗?请检查您是否 运行 PHP 作为 NTS 运行时 - 您可以使用 phpinfo();.

进行检查

我明白了。我必须在我的服务器上安装 SQL 服务器 (msodbcsql_17.2.0.1_x64.msi) 的 ODBC 驱动程序 17。 SQL Server Native Client 11.0 已安装,但未安装 SQL Server 的 ODBC 驱动程序。

供以后遇到此问题或类似问题的其他人参考...

可以在 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://docs.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?view=sql-server-2017

下载

更多信息可在 https://docs.microsoft.com/en-us/sql/connect/php/loading-the-php-sql-driver?view=sql-server-2017https://docs.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?view=sql-server-2017

我现在可以使用 sqlsrv_connect 或 PDO 建立到 Sql 服务器的连接。

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));}