使用sqlsrv将php 7.2连接到MS SQL

时间:2017-12-28 14:56:17

标签: php sql-server sqlsrv php-7.2

我正在尝试通过我的计算机上的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尺寸”,这表示页面正在工作,直到它到达连接线。
我不确定使用什么sqlsrv扩展名。
我环顾四周,可以看到7和7.1的版本,但不是7.2版本。

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

任何指针都会感激不尽。我花了几天时间在这上面,不要以为我到处都是 感谢

5 个答案:

答案 0 :(得分:14)

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

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

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

找到了它

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

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

延长= php_sqlsrv_72_nts.dll

extension = php_pdo_sqlsrv_72_nts.dll

答案 1 :(得分:5)

您需要确定的是

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

然后,您必须查看需求页面here

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

然后转到download page,选择您喜欢的特定版本的链接。 (此问题为 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_xxxphp_sqlsrv_xxx的文件。

下一个数字表示您的PHP版本,在本例中为PHP 7.2,因此您需要选择文件名为_72_的文件。

下一个数字表示您的运行时线程安全非线程安全,它们特定于文件名_ts_(线程安全)或{{1 }}(非线程安全)。

下一个数字表示您的运行时 32位 64位,这些特定于文件名_nts_(32位)或_x86 (64位)

因此,通过_x64检查您的PHP环境,或在控制台上运行命令phpinfo(),然后注意显示的消息,对于我的计算机,看起来像这样...

php --version

通过这些信息,我发现PHP 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 7.2表示线程安全非线程安全将是{{ 1}}),而ZTS 32位

因此,我必须选择的扩展名为NTSx86

最终:将它们复制到您的php_sqlsrv_72_ts_x86.dll文件夹中,并使用这两个文件名编辑php_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)来测试结果。这意味着您的环境现在可以运行PHP并连接到phpinfo.php

答案 2 :(得分:3)

我解决了〜 PHP版本7.2.4

pdo_sqlsrv:5.3.0 + 11108

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

2。将其放入XAMPP \ PHP \ ext文件夹

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

extension = php_pdo_sqlsrv_72_ts.dll

extension = php_sqlsrv_72_ts.dll

4.let对MSSQL进行测试,但仍然存在错误消息msg,建议您下载ODBC Driver for SQL

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

(我的工具是SQLServer®X86的命令行实用程序11)

6。再次启动test.php,一切正常!

答案 3 :(得分:1)

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

<强> php_sqlsrv_72_ts_x86.dll

<强> php_pdo_sqlsrv_72_ts_x86.dll

然后重新启动XAMPP。

P.S。 “我使用的是PHP 7.2.5”

答案 4 :(得分:0)

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

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

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

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

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

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

extension = pdo_sqlsrv 扩展名= sqlsrv 请勿更改您放在/ xampp / php / ext /目录中的实际文件名。

“ 7.2线程安全(TS)x86”为我的“ sqlsrv”和“ pdo_sqlsrv”扩展工作。

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

enter image description here