【问题标题】:PHP Sql Server PDOException:could not find driverPHP Sql Server PDOException:找不到驱动程序
【发布时间】:2018-12-29 03:49:39
【问题描述】:

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

我从微软网站下载了 PHP Sql Server Drivers 并将 .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 Server?

【问题讨论】:

  • 我认为您需要将 .dll 放在 ini 中扩展名的末尾。更改后记得重启网络服务器。
  • @delboy1978uk 说了什么。在 Windows 上,我们假设您没有从源代码编译,并且 PDO 扩展 (php_pdo.dll) 已内置到您的二进制文件中。如果没有,请确保在 SQLSRV 之前加载它。

标签: php sql-server php-extension php-ini


【解决方案1】:

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

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

【讨论】:

  • 是的,NTS,因为我在 Windows 服务器上使用 fastcgi。
【解决方案2】:

我明白了。我必须在我的服务器上安装 ODBC Driver 17 for SQL Server (msodbcsql_17.2.0.1_x64.msi)。已安装 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 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));}

【讨论】:

猜你喜欢
  • 2017-02-13
  • 2018-05-27
  • 2016-08-30
  • 2023-03-27
  • 2012-03-07
  • 2018-05-01
  • 2016-01-13
  • 2016-09-03
相关资源
最近更新 更多