8

我正在尝试在我的机器上通过 PHP 建立和运行 MS SQL 的连接。我正在运行 IIS,安装了 PHP 7.2 和 MS SQL Express 2017。我的基本网页正在运行,但是当我单击打开 PHP 页面时,连接不起作用。

session_start();

echo "Hello ";
if (isset($_POST['submit'])) {
    $_SESSION["server"] = $_POST['server'];
    $_SESSION["database"]= $_POST['database'];
    $_SESSION["username"] = $_POST['username'];
    $_SESSION["password"] = $_POST['password'];

    echo $_SESSION["database"];

    //CONNECTION
    $serverName = $_SESSION["server"];
    $connectionInfo["Database"] = $_SESSION["database"];
    $connectionInfo["UID"] = $_SESSION["username"];
    $connectionInfo["PWD"] = $_SESSION["password"];

    echo "midway";

    $conn = sqlsrv_connect($serverName, $connectionInfo);

    echo "Bye";
}

当我运行它时,我得到“Hello dimensions midway”,这表明页面正在工作,直到它到达连接线。
我不确定要使用什么 sqlsrv 扩展。
我环顾四周,可以看到 7 和 7.1 的版本,但看不到 7.2 的版本。

我已添加extension=php_sqlsrv_71_nts_x86.dll到 php.ini 的底部(并且该文件存在于 中C:\Program Files (x86)\PHP\v7.2\ext)。

任何指点将不胜感激。我已经在这上面花了几天时间,但我认为我没有取得任何进展。
谢谢

4

5 回答 5

22

我遇到了同样的问题。后来我发现我使用的是旧版本的 Microsoft SQL 文件 for PHP。

对于 PHP 7.2,您必须使用 7.2 版本的 MS PHP SQL

该版本无法通过微软网站获得。我在这里找到它https://github.com/Microsoft/msphpsql/releases

一旦我使用了这些文件,一切正常。我使用了 64 位文件。

然后你需要在 php.ini 文件中添加这些行

extension=php_sqlsrv_72_nts.dll
extension=php_pdo_sqlsrv_72_nts.dll 
于 2018-05-18T06:01:56.767 回答
9

你需要确定的是

  • 哪个版本的 PHP
  • 您使用的运行时是线程安全的或非线程安全的
  • 您使用的运行时是64 位32 位

然后你必须在这里查看需求页面

检查您使用的 PHP 版本,所以更喜欢您的问题,这意味着PHP 7.2哪个SQL Server 扩展版本 5.3最适合。

然后转到下载页面,选择您喜欢的版本的链接。(在这个问题是5.3

您下载的文件将是一个可自解压的EXE文件,然后解压到您想要的位置。

你会看到dll这样的文件列表......

php_pdo_sqlsrv_7_nts_x64.dll
php_pdo_sqlsrv_7_nts_x86.dll
php_pdo_sqlsrv_7_ts_x64.dll
php_pdo_sqlsrv_7_ts_x86.dll
...
php_sqlsrv_72_ts_x86.dll

这些文件的名称是什么意思?

就像我之前说的,你需要确定什么来选择合适的扩展文件。SQL Server 扩展需要 2 个名称以php_pdo_sqlsrv_xxx和开头的文件php_sqlsrv_xxx

下一个数字表示您的PHP版本,在这种情况下PHP 7.2,您需要选择文件名_72_

下一个数字表示您的运行时Thread SafeNon-Thread Safe,具体在文件名_ts_(Thread Safe) 或_nts_(Non-Thread Safe) 中。

下一个数字意味着您的运行时32 位64 位,具体在文件名_x86(32 位) 或_x64(64 位)

所以检查你的 PHP 环境phpinfo(),或者在你的控制台上运行命令php --version,然后注意显示的消息,对于我的计算机来说,它看起来像这些......

PHP 7.2.12 (cli) (built: Nov  8 2018 06:12:12) ( ZTS MSVC15 (Visual C++ 2017) x86 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

从这些信息来看,我得到了 PHP 7.2ZTS意思是线程安全非线程安全将是NTS),并且x8632 位

所以,我必须选择的是扩展php_sqlsrv_72_ts_x86.dllphp_pdo_sqlsrv_72_ts_x86.dll

最后:将它们复制到您的/php/ext文件夹并php.ini使用这两个文件名进行编辑。

// example with my case
extension=php_pdo_sqlsrv_72_ts_x86
extension=php_sqlsrv_72_ts_x86

然后保存php.ini文件,然后重新启动服务器。

通过查看页面phpinfo.php中必须包含pdo_sqlsrv的 来测试您的结果。这意味着您的环境可以运行 PHP 并立即连接SQL Server

于 2018-11-28T08:46:59.593 回答
3

我解决了~ PHP 版本 7.2.4

pdo_sqlsrv:5.3.0+11108

1.下载正确版本的sqlsrv和sqlsrv pdo

2.放入XAMPP\PHP\ext文件夹

3.之后将行写入 php.ini > 模块设置

扩展=php_pdo_sqlsrv_72_ts.dll

扩展=php_sqlsrv_72_ts.dll

4.测试一下MSSQL还是有错误提示,建议大家下载ODBC Driver for SQL

5.转到https://docs.microsoft.com/zh-tw/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-2017然后下载正确的文件

(我的是 SQL Server® X86 的命令行实用程序 11)

6.fire test.php 再次一切正常!

于 2018-08-23T02:20:10.280 回答
1

我终于找到了解决方案。您所要做的就是在php.ini文件中使用这些扩展名。

php_sqlsrv_72_ts_x86.dll

php_pdo_sqlsrv_72_ts_x86.dll

并重新启动您的 XAMPP。

PS“我正在使用 PHP 7.2.5”

于 2018-05-21T15:38:51.153 回答
0

如何在 xampp 上使用SQL Server DLL带有版本的文件PHP 7.2

https://github.com/Microsoft/msphpsql/releases

PHP 7.1要从存储库下载适用于或更高版本的Windows DLL PECL,请转到SQLSRVPDO_SQLSRV PECL页面。

https://pecl.php.net/package/sqlsrv/5.6.1/windows

https://pecl.php.net/package/pdo_sqlsrv/5.6.1/windows

php_注意:在文件中添加扩展 dll 文件名时不要忘记删除前缀php.ini。例如。

extension=pdo_sqlsrv
extension=sqlsrv

** 不要更改您放入/xampp/php/ext/目录的实际文件名。

7.2 Thread Safe (TS) x86为我工作sqlsrvpdo_sqlsrv扩展。

重新启动 xampp 或 apache,然后在测试 php 文件中打印时可以看到启用的pdo_sqlsrv扩展名phpinfo()

在此处输入图像描述

于 2019-08-19T09:50:10.433 回答