PDO sqlsrv: 找不到驱动程序。

8

我在尝试使用PHP连接SQL Server。在我的本地机器上使用XAMPP,一切都很顺利。但是现在我要将我的应用程序放到生产服务器上。

在这个服务器上,安装了Microsoft IIS 6.1和运行PHP版本为7.0.7。我还从这里安装了ODBC驱动程序。接下来,我在php.ini文件中取消了以下行的注释:

extension=php_sqlsrv_7_nts.dll
extension=php_pdo_sqlsrv_7_nts.dll

我从官方微软网站下载了文件我的问题是什么? 不幸的是,在我重新启动IIS之后,PDO函数会抛出PDOException错误,并显示以下消息:
could not find driver

我正在使用以下函数进行连接,在我的本地机器上运行得非常好:

try {
    $con = new PDO("sqlsrv:Server=" . SERVER . ";Database=" . DATABASE, USERNAME, PASSWORD);
    // set the PDO error mode to exception
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "No connection: " . $e->getMessage();
    exit;
}

我还能做些什么?


你的服务器是否安装了 Microsoft Visual C++ 2015 Redistributable? - Eimsas
@Eimsas 是的。它有。 - Julian Schmuckli
1
然后尝试检查日志,它应该有比“找不到驱动程序”更多的信息。我在使用WAMP时遇到了同样的问题,但是我安装了MS c++并尝试了几个版本的php_sqlsrv。此外,至少在wamp中需要重新启动。 - Eimsas
在Windows上使用XAMPP,您需要使用线程安全的dll而不是NTS(非线程安全)版本。 - RiggsFolly
4个回答

12
以下是详细过程,如果对某人有所帮助:PHP 版本-7.4
  1. 从此链接下载并提取 .dll 文件 - https://learn.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view=sql-server-ver15

  2. 将文件粘贴到 C:\xampp\php\ext 中,您的路径可能会有所不同。

  3. php.ini 底部或扩展部分添加这两行。

     extension=php_sqlsrv_74_ts_x64.dll
     extension=php_pdo_sqlsrv_74_ts_x64.dll
    
  4. 重新启动您的Xampp服务器,我建议重新启动计算机,然后一切都会正常工作。

检查SqlSRV是否已启用

使用phpinfo()或http://localhost/dashboard/phpinfo.php进行检查,如下所示-

PHP信息中的SQLSrv驱动程序检查

希望这能帮助某些人。


7

我在Windows服务器上找到了错误日志,自己解决了错误。

我的日志中出现了以下错误:

[21-Apr-2017 07:12:14 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library '...\ext\php_pdo_sqlsrv_7_nts.dll' - %1 is not a valid Win32 application. in Unknown on line 0

然后我重新下载了驱动程序,并安装了x64驱动程序。最终它可以正常工作,没有任何问题。


3
你希望更详细地描述如何安装它们吗?我只需将下载的DLL文件复制到名为PHP版本的PHP文件夹中的扩展文件夹中,然后重新启动IIS,但在< ? php phpinfo(); ?>中的PDO列表中看不到它。 - saber tabatabaee yazdi
你在哪里看到这个错误?在哪个日志文件中?你是如何启用它的? - Jorge Cornejo Bellido

1

0

我花了一些时间解决“无驱动程序”错误。我按照这里提到的步骤进行了一些尝试,并发现了其他一些在新错误后有所帮助的步骤。供以后参考:

  • Microsoft下载最新的驱动程序(正如Julian Schmuckli所说)。
  • 使用Phpinfo()检查您的XAMPP是否为64位!如果是32位,则需要不同的驱动程序。
  • 将驱动程序添加到您的Php.ini文件中,并将dll保存在php/ext文件夹中(saber tabatabaee yazdi的问题)。
  • 对于连接,请使用以下代码:
$dbh = new PDO ("sqlsrv:Server=$server;Database=$dbname",$username,$pw); 

如果您要添加端口,请使用:

$server = "192.168.1.15, 51022";

其中IP(也可以是主机名)是您的服务器,51022是您的端口。


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