致命错误:调用未定义函数 sqlsrv_connect()

Posted

技术标签:

【中文标题】致命错误:调用未定义函数 sqlsrv_connect()【英文标题】:Fatal error: Call to undefined function 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 部分。有什么指点吗? 【参考方案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 日历 核心[...] SPLsqlsrv 标准[...]

【讨论】:

我再次修改了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 的数据库服务器。 不,这应该不是问题。您收到的错误消息是什么? 你能看看我的帖子吗:***.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 扩展。

【讨论】:

以上是关于致命错误:调用未定义函数 sqlsrv_connect()的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:未捕获的错误:调用 C:\xampp\htdocs\ 中未定义的函数 mysql_connect()

致命错误:在 php 中调用未定义函数 fetch_assoc()

致命错误:调用未定义的函数 site_url()

PHP 致命错误:调用未定义的函数 imagecreatefrompng()

致命错误:调用未定义的函数 imagewebp() [关闭]

PHPmyadmin 问题 - 致命错误:未捕获错误:调用未定义函数 mb_detect_encoding()