【问题标题】:Fatal error: Call to undefined function sqlsrv_connect()致命错误:调用未定义函数 sqlsrv_connect()
【发布时间】:2014-03-27 17:37:01
【问题描述】:

我遇到了很多关于同一主题问题的帖子,但是我仍然无法解决它,所以我问。我正在尝试在我的 php 脚本中连接到 sql。我的连接字符串是:

/* Specify the server and connection string attributes. */
$serverName = "xxx-PC\SQLExpress";
$connectionOptions = array("Database"=>"Salesforce");
$conn = sqlsrv_connect($serverName, $connectionOptions);
if($conn === false)
{
      die(print_r(sqlsrv_errors(), true));
}

我已安装并在我位于 wamp 文件夹下的 php.ini 文件中包含以下内容:C:\wamp\bin\php\php5.4.16

extension=c:/wamp/bin/php/php5.4.16/ext/php_sqlsrv_53_ts.dll

我的wampserver 运行良好,wampapachewampsqld 服务也运行良好。我能够成功执行 php.exe。但是我无法连接到我的数据库所在的SQL Server 2008 R2。请帮忙!

编辑 1:当我尝试连接到 SQL Server 2008 R2 时,wamp 服务器正在运行 wampmysql 服务。这可能是原因吗?我应该使用MySQL 而不是SQL 吗?有什么指点吗?

编辑 2:我在运行 phpinfo() 时根本看不到 sqlsrv 部分,尽管我在 wamp 服务器的 bin 文件夹中的 php.ini 文件中添加了 extension=php_sqlsrv_54_ts.dll

【问题讨论】:

  • 为了避免红鲱鱼:MySQL 和 SQL Server 是完全不同的数据库引擎——您发布的代码既不使用 PDO,也不使用 MySQL。
  • @ÁlvaroG.Vicario 我删除了PDO dll 并更新了添加的扩展的路径,以确保它引用 php/ext 文件夹中的 dll。但是,我的 phpinfo() 没有返回 sqlsrv 部分。有什么指点吗?

标签: php sql-server wamp


【解决方案1】:

首先检查扩展是否在phpinfo(); 中正确加载(应该出现sqlsrv 之类的内容)。如果不是,则扩展程序未正确加载。安装扩展后还需要重启 apache。

【讨论】:

  • @DaveChild 我跑了phpinfo() 并没有看到 sqlsrv。我错过了吗?它应该出现在哪里?如果这确实是问题,如何正确上传扩展?
  • 如果你错过了它(这很可能),那么问题是加载扩展。没有加载的可能原因有很多。首先检查您是否修改了正确的 php.ini 文件(php.ini 文件位置将显示在 phpinfo 中)。检查您的错误日志以获取更多信息。
  • @DaveChild 很抱歉,这是我第一次在 php 中使用 sql。在哪些标题下可以查看php.ini 的路径?我完全迷失了。
  • @DaveChild 请参阅上述问题中的edit
【解决方案2】:

安装第三方扩展时需要确保所有编译参数匹配:

  • PHP 版本
  • 架构(32/64 位)
  • 编译器(VC9、VC10、VC11...)
  • 线程安全

常见故障包括:

  • 编辑错误的php.ini 文件(这在捆绑包中很常见);正确的路径显示在phpinfo()
  • 忘记重新启动 Apache。
  • 无法看到启动错误;这些应该显示在 Apache 日志中,但您也可以使用命令行来诊断它,例如:

    php -d display_startup_errors=1 -d error_reporting=-1 -d display_errors -c "C:\Path\To\php.ini" -m
    

如果一切正常,您应该会在命令输出中看到 sqlsrv 和/或 phpinfo()(取决于您正在配置的 SAPI):

[PHP 模块]
bcmath
日历
核心
[...]
SPL
sqlsrv
标准
[...]

【讨论】:

  • 我再次修改了php,在命令输出中看到了sqlsrv。但是,当我运行 phpinfo() 时,我没有看到它。它不包含sqlsrv 的任何标题。考虑到我确实在命令输出中看到了它,这是否表明我的设置是正确的?
  • php -iphpinfo() 相同,只是格式不同(纯文本 vs HTML)。
  • 我在上面添加了一个屏幕截图。如果相同,为什么 sqlsrv 没有反映在 html 页面中?当我尝试使用sqlsrv_connect 连接到我的 SQL Server 时,我仍然遇到同样的错误。
  • 解决了!问题是我指的是错误的 php.ini 文件 - 尴尬
【解决方案3】:

This 帮助我找到了答案。在我的情况下,有两个 php.ini 文件用于 wamp。一个在 php 文件夹下,另一个在 C:\wamp\bin\apache\Apachex.x.x\bin 文件夹下。通过sqlsrv_connect函数连接SQL时,我们指的是apache文件夹中的php.ini文件。将以下内容(根据您的版本)添加到此文件中:

extension=c:/wamp/bin/php/php5.4.16/ext/php_sqlsrv_53_ts.dll

【讨论】:

  • 你是在 php.ini 文件的 Windows 扩展下添加这个吗?
  • @user2995165 是的,这是在 windows 扩展下
  • 我这样做了,但错误仍然存​​在。如果数据库位于不同的服务器中,会有什么不同吗?因为我有两台服务器,一个带有 wamp 的应用程序服务器和带有 SQL Server 2005 的数据库服务器。
  • 不,这应该不是问题。您收到的错误消息是什么?
  • 你能看看我的帖子吗:stackoverflow.com/questions/24776078/…。我无法得到任何帮助。如果你能帮我弄清楚,那就太棒了。我收到致命错误:调用未定义的函数 sqlsrv_connect()
【解决方案4】:

我也有这个,因为在 apache PHPIniDir D:/wamp/bin/php/php5.5.12 的 httpd.conf 中这是不正确的

【讨论】:

    【解决方案5】:

    如果您使用的是 Microsoft 驱动程序 3.1、3.0 和 2.0。 请检查您的 PHP 版本是否已安装 IIS。

    使用此脚本检查 php 版本:

    <?php echo phpinfo(); ?>
    

    如果您使用网络平台安装程序安装了PHP Manager in IIS,您可以从中检查版本。

    那么:
    如果您使用的是新的 PHP 版本(5.6),请下载Drivers from here

    对于低于 5.6 的 PHP 版本 - 请下载@987654323 @

    • PHP 驱动程序 3.1 版需要 PHP 5.4.32 或 PHP 5.5.16 或更高版本。
    • PHP 驱动程序版本 3.0 需要 PHP 5.3.0 或更高版本。如果可能,请使用 PHP 5.3.6 或更高版本。
    • PHP 驱动程序 2.0 版驱动程序适用于 PHP 5.2.4 或更高版本,但不能 使用 PHP 5.4。如果可能,请使用 PHP 5.2.13 或更高版本。

    然后使用 PHP 管理器将下载的驱动程序添加到 php config 文件中。您可以如下所示进行(浏览文件并按 OK)。 然后重启 IIS 服务器

    如果此方法不起作用,请更改 php 版本并尝试运行您的 php 脚本。

    提示:把php version改小点试试看是怎么回事,可以下载相关驱动。

    【讨论】:

      【解决方案6】:

      pdo_sqlsrv 中搜索 sqlsrv 扩展。

      【讨论】:

        猜你喜欢
        • 2016-07-02
        • 1970-01-01
        • 2018-03-02
        • 1970-01-01
        • 2018-04-16
        • 2018-05-02
        • 2016-08-26
        • 2016-08-01
        • 2015-08-24
        相关资源
        最近更新 更多