【问题标题】:mssql_connect() with PHP5 and MSSQL2012 Expressmssql_connect() 与 PHP5 和 MSSQL2012 Express
【发布时间】:2012-08-30 06:16:21
【问题描述】:

我在尝试连接到我的 MSSQL 2012 Express 数据库时遇到了严重问题,PHP5 在 Apache 上运行。 作为测试设置,我刚刚在 Windows 7 机器上安装了一个带有 PHP 5.4.4 和 Apache 的 XAMPP。

我的 PHP 代码(phpmssql_genxml.php):

$connection = mssql_connect('192.168.40.150', $username, $password);
if (!$connection) {  die('Not connected : ' . mssql_get_last_message());} 


$db_selected = mssql_select_db($database, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mssql_get_last_message());
} 


$query = "SELECT * FROM Cust WHERE 1";
$result = mssql_query($query);
if (!$result) {  
  die('Invalid query: ' . mssql_get_last_message());
} 

尝试进入站点时的输出:

Fatal error: Call to undefined function mssql_connect() in C:\xampp\htdocs\phpmssql_genxml.php on line 13

即使我尝试将用户名和密码硬编码到字符串中,我仍然得到相同的结果。 在谷歌上搜索了很多,但还没有找到解决我问题的帖子:/ 已为数据库实例管道启用 TCP/IP,甚至尝试为其分配特定的 TCP 端口。在 Win7 防火墙中创建了一条规则,允许所有流量到标准端口 1433。仍然没有运气。

any1 有什么想法吗? “致命错误”部分是什么意思?尝试连接时是 Apache 错误、PHP 还是数据库错误??

【问题讨论】:

  • 致命错误是 PHP 错误。 PHP 找不到函数mssql_connect()。找出(使用phpinfo())您的 php.ini 文件所在的位置。找到条目extension=php_mssql.dll 并取消注释。保存文件,重新启动 apache 并重试。
  • 顺便说一句;如果你真的在使用 XAMPP,这意味着你使用的是 MySQL 而不是 MSSQL...
  • 有关更多信息,请查看php.net/manual/en/mssql.setup.php 和本网站上的用户贡献说明。默认XAMPP没有开启这个功能
  • @Lex:我已取消注释 php_mssql.dll 但我的 /php/ext/ 文件夹中不存在 mssql.dll 文件,认为这可能是它给出致命错误的原因吗?是的,我知道 MySQL 是 XAMPP 包的一部分,但我已经在同一台服务器上安装了 MSSQL 2012 Express 服务器(它是一个测试服务器环境),因为我运行了另一个依赖于 MSSQL 的 BI 系统。我的测试服务器上的 MySQL 没有运行。
  • 很有可能。看看你是否可以从某个地方下载 dll(尝试谷歌搜索“php_mssql.dll windows php [your phpversion]”)

标签: php sql-server


【解决方案1】:

您的 PHP 设置中缺少 MSSQL 驱动程序。从here 下载它,假设您具有页面上提到的所需系统配置。

根据他们的说明进行设置:

  1. 将 SQLSRV30.EXE 下载到临时目录
  2. 运行 SQLSRV30.EXE
  3. 出现提示时,输入 PHP 扩展目录的路径
  4. 解压文件后,阅读 SQLSRV30_Readme.htm 文件的安装部分以了解后续步骤

如果您打算使用 MSSQL,我还建议您使用标准的 Apache + PHP 安装,而不是任何 *AMP 包。

【讨论】:

  • 既然要求是:A supported operating system, such as: Windows Server 2003 Service Pack 1 Windows XP Service Pack 3 Windows Vista Service Pack 1 or later Windows Server 2008 Windows Server 2008 R2 Windows 7 我想它是 apache 还是 IIS 都没有关系,因为它必须在 Windows 机器上运行?还是我错了?部署时,我的目标是运行 Apache for the webpart 的 Linux 机器,支持 MSSQL(链接到我的运行 MSSQL Express 的 Windows XP 机器)。但是,如果支持的驱动程序需要一个 win 框,那么该设置或多或少会被“破坏”。
  • 对,要求是运行PHP的Web服务器,无论是IIS还是Apache。所以如果我猜对了,你是在 win 机器上开发,但你的目标实际上是 Linux 机器?是的,在每个系统中安装驱动程序肯定有不同的步骤。如果你需要在 windows 机器上开发,我建议在虚拟机上运行 Linux,因为 PHP 通常有很多操作系统差异。我个人的经验是,相同的 PHP 代码通常不能在不同的操作系统上运行或以不同的方式运行——尽管这在某种程度上取决于正在做的事情。
  • 好吧,让我解释一下设置。有一个 MSSQL08 Express 服务器在 Windows 机器上运行,它已部署并运行 BI。我正在尝试在已经运行的应用程序中实现一些谷歌地图,这就是我现在使用 PHP 的原因。我的目标服务器计划为具有 Apache PHP 的 Linux 机器,而不是设置新的 Windows 机器运行 IIS 并支持 PHP,但在这两种情况下,我都需要支持从 Webserv 连接到 MSSQL08 db。考虑 Windows 机器的唯一原因是仅用于测试目的。你有什么建议?
  • 我建议使用更多的跨平台数据库,例如 MySQL 或 PostgreSQL。 :) 如果您需要使用 MSSQL 从 Linux 环境连接,有一些说明,例如 here。不过我没有这方面的经验。
【解决方案2】:

您不需要使用 SQLSRV30,因为这不是我需要的解决方案,尽管有些人可能会觉得它很有用。我有一个运行 XAMPP + php5.5.9 + MSSQL2012 的本地开发环境,我需要使用 mssql 函数,因为这就是我们在服务器上使用的。所以我使用 freetds 并且“幸运地”发现了这个:

https://moodle.org/mod/forum/discuss.php?d=232844

其中一位用户已经为我的 php 版本编译了 php_dblib.dll TS 和 NTS,这足以说明我一切正常,并使用了我们开发团队习惯的所有 MSSQL 函数。始终可以编译 mssql 支持的扩展。

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2019-07-05
    相关资源
    最近更新 更多