【问题标题】:Connecting php 7.2 to MS SQL using sqlsrv使用 sqlsrv 将 php 7.2 连接到 MS SQL
【发布时间】:2018-06-09 03:07:23
【问题描述】:

我正在尝试在我的机器上通过 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 的版本。

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

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

【问题讨论】:

  • 运行一个包含phpinfo(); 的脚本,它会转储一个显示支持的页面。确保列出了 MSSQL 驱动程序。
  • 是的。 phpinfo() 将显示您是否有 MSSQL= SQLSERVER
  • 谢谢亚历克斯,我已经运行了,驱动程序没有列出。这是否意味着它不受支持,或者我只是没有驱动程序或它不可用?
  • 抱歉,选词不当。我应该说“当前加载”而不是“支持”。您需要安装与您的 PHP 版本相匹配的扩展。
  • @Daves - 查看 releases on GitHub(特别是 5.1.1)似乎有 7.2 的驱动程序 - 'windows-7.2.zip' - 尽管这些被标记为预发行版跨度>

标签: php sql-server sqlsrv php-7.2


【解决方案1】:

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

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

要从PECL 存储库下载PHP 7.1 或更高版本的Windows DLL,请转到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.ini 文件中添加扩展 dll 文件名时,不要忘记删除 php_ 前缀。例如。

extension=pdo_sqlsrv
extension=sqlsrv

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

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

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。后来我发现我使用的是旧版本的 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 
    

    【讨论】:

    • 谢谢,节省了我很多时间
    【解决方案3】:

    你需要确定的是什么

    • 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 扩展需要两个文件名以php_pdo_sqlsrv_xxxphp_sqlsrv_xxx 开头。

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

    下一个数字表示您的运行时线程安全非线程安全,具体在文件名_ts_(线程安全)或_nts_(非-线程安全)。

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

    所以通过phpinfo()检查你的PHP环境,或者在你的控制台上运行命令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 文件夹并使用这 2 个文件名编辑 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

    【讨论】:

    • 嘿@Natta,你能把你用的dll文件发给我吗?我有完全相同的版本,我正在尝试从这个 Git repo 下载驱动程序,但它不工作github.com/microsoft/msphpsql/releases/tag/v5.3.0
    • 感谢您的快速回复,我已经想通了。我的 odbc 驱动程序版本错误。
    • 这真是令人难以置信的坏蛋。你为我节省了很多时间!感谢您的深入解释。
    • 相同版本,完全按照你说的做,php -v 运行成功,这意味着它找到了 dll,但是在最后一步 phpinfo() 没有找到与 pdo_sqlsrv 相关的任何内容
    • 误报,原来我正在重启Apache服务器,但我需要重启节点服务器>。
    【解决方案4】:

    我解决了~ 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.我们测试一下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.再次启动 test.php 一切正常!

    【讨论】:

      【解决方案5】:

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

      php_sqlsrv_72_ts_x86.dll

      php_pdo_sqlsrv_72_ts_x86.dll

      并重新启动您的 XAMPP。

      附: “我正在使用 PHP 7.2.5”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-24
        • 1970-01-01
        • 2016-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        相关资源
        最近更新 更多