我是一名 MySQL/Apache 用户,正在尝试使用 IIS 和 SQL 服务器,所以如果这是一个愚蠢的问题,请耐心等待。
我使用的是 IIS 版本 7.5。PHP 版本 5.3.13 和 SQL Server 2005 IIS 在端口 90 上运行,不确定这是否会造成影响。我知道我的 SQL Server 正在运行,因为我可以在服务器管理工作室中浏览/连接到它。
我知道 php 配置正确,因为 //localhost:90/phpinfo.php 运行正常。
我将 phpinfo 中的 php_msql.dll 扩展更新为:extension=ext/php_msql.dll
编辑-但是,当我在“配置命令”行下运行 phpinfo() 时,出现了以下内容:--without-mssql
我找到/下载了 ntwdblib.dll 并将其放在 sys32 和 php 根目录中。
所有这些措施都应该能解决问题,但事实并非如此。
这是我正在使用的代码,直接来自 php.net:
<?php
// Server in the this format: <computer>\<instance name> or
// <server>,<port> when using a non default port number
$server = 'localhost';
// Connect to MSSQL
$link = mssql_connect($server, 'uname', 'pwd');
if (!$link) {
die('Something went wrong while connecting to MSSQL');
}
?>
显然,我使用的是真实的用户名和密码,但是当我在浏览器中加载文件时,我收到 500 错误。检查日志后,显示的内容如下:
2012-06-25 12:41:29 ::1 获取 /test.php - 90 - ::1 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/536.5+(KHTML,+like+Gecko)+Chrome/19.0.1084.56+Safari/536.5 500 0 0 5
对我来说,这没什么帮助。我做错了什么?
谢谢
答案1
尝试将实例名称附加到服务器名称。下面摘自http://php.net/manual/en/function.mssql-connect.php
<?php
// Server in the this format: <computer>\<instance name> or
// <server>,<port> when using a non default port number
$server = 'KALLESPC\SQLEXPRESS';
// Connect to MSSQL
$link = mssql_connect($server, 'sa', 'phpfi');
if (!$link) {
die('Something went wrong while connecting to MSSQL');
}
?>
编辑
另外,请验证以下内容:
- 确保已设置具有“SQL SERVER 身份验证”且有权连接的用户
另外,请确保安装后仍遇到问题,运行 PHPinfo 并检查是否找到以下内容:
- PHPINFO: mssql
- 已启用 MSSQL 支持
使用下列方法之一指定服务器。
hostname:port
(Linux)或hostname,port
(Windows).\MSSQLINSTANCENAME
COMPUTER\MSSQLINSTANCENAME
- 用 IP 地址替换主机名以排除解析问题
使用 ODBC 连接器
- 管理工具 -> 数据源 (ODBC)
- 系统 DNS
添加...“SQL Server”
- 然后只需使用 odbc_connect("sql_test", "user", "pass") 即可。
答案2
好吧,经过 2/3 天的时间,我找到了答案。显然,从 php 5.3 开始,php 在 IIS 上运行时不再使用 msql.dll 扩展。现在,它使用名为 sqlsrv.dll 的东西来代替它。此外,有了这个新扩展,就需要使用 php 中提供的 sqlsvr api 了。所以从本质上讲,我使用的是 mssql_connect,而我本应该使用 sqlsrv_connect。
这仍然不能解决我的错误日志问题,而且我仍然无法连接到服务器,但这是由于用户名/密码组合错误造成的。
所以感谢大家的帮助,希望有人能发现这很有用。