如何在 PHP 中通过 ODBC 连接到 Server 2008?
How can I connect to Server 2008 via ODBC in PHP?
我有一个远程服务器 运行 IIS7 和 SQL Server 2008,我试图通过 PHP 脚本中的 ODBC 连接到它们:
$server = "server_ip";
$database = 'db';
$user = 'user';
$password = 'pass';
$conn=odbc_connect("Driver={SQL Server};Server=$server;Database=$database;", $user, $password);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( odbc_error(), true));
}
但是当它运行时,我得到:
Warning: odbc_connect(): SQL error: [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied., SQL state 08001 in SQLConnect in X:\server\htdocs\alert-interim\test.php on line 10
Connection could not be established.
08001
还有:
- 我在 Sql 服务器配置管理器下启用了 TCP/IP,"SQL Server Network Configuration" -> "Protocols for MSSQL Server"
- 我本地环境是Windows7运行XAMPP和PHP5.4.27
- 1433 端口已在我的本地防火墙中打开
我也一直在玩弄 sqlsrv 连接,但我似乎越来越接近 ODBC。服务器上是否还有其他需要为 ODBC 连接设置的东西,或者我的连接方法有问题?
编辑:根据 Daan 的评论,我尝试将连接方法切换到 PDO(但在 Windows 上使用 sqlsrv 代替):
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08001]: [Microsoft][SQL Server Native Client 11.0]Named Pipes Provider: Could not open a connection to SQL Server [53]. ' in X:\server\htdocs\alert-interim\test.php:9 Stack trace: #0 X:\server\htdocs\alert-interim\test.php(9): PDO->__construct('sqlsrv:Server=7...', 'user', 'pass') #1 {main} thrown in X:\server\htdocs\alert-interim\test.php on line 9
我还在 Sql 服务器配置管理器中打开了命名管道并重新启动了服务,但无济于事。
我的这个问题的具体版本是通过两个步骤解决的:
- 必须在主机文件中创建一个条目。我对此有点含糊,因为它是由我的网络托管服务商的支持技术人员执行的,他们的回复很详细。在这一点上,我开始在我的脚本中收到不同的错误消息,这使我在 #2:
之后取得了成功
- 我必须给连接用户
db_owner
角色,like so (this post 让我走上正轨)。
现在我可以 运行 使用我最初发布的代码远程查询数据库,并指定端口:
$virtual_dsn = 'DRIVER={SQL Server};SERVER=12.34.56.78,1433;DATABASE=db';
$connection = odbc_connect($virtual_dsn,'user','pass') or die('ODBC Error:: '.odbc_error().' :: '.odbc_errormsg().' :: '.$virtual_dsn);
对我来说,手动添加端口后就可以了!它后面必须跟一个逗号。
$server = "server_ip" . ",1433";
我有一个远程服务器 运行 IIS7 和 SQL Server 2008,我试图通过 PHP 脚本中的 ODBC 连接到它们:
$server = "server_ip";
$database = 'db';
$user = 'user';
$password = 'pass';
$conn=odbc_connect("Driver={SQL Server};Server=$server;Database=$database;", $user, $password);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( odbc_error(), true));
}
但是当它运行时,我得到:
Warning: odbc_connect(): SQL error: [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied., SQL state 08001 in SQLConnect in X:\server\htdocs\alert-interim\test.php on line 10
Connection could not be established.
08001
还有:
- 我在 Sql 服务器配置管理器下启用了 TCP/IP,"SQL Server Network Configuration" -> "Protocols for MSSQL Server"
- 我本地环境是Windows7运行XAMPP和PHP5.4.27
- 1433 端口已在我的本地防火墙中打开
我也一直在玩弄 sqlsrv 连接,但我似乎越来越接近 ODBC。服务器上是否还有其他需要为 ODBC 连接设置的东西,或者我的连接方法有问题?
编辑:根据 Daan 的评论,我尝试将连接方法切换到 PDO(但在 Windows 上使用 sqlsrv 代替):
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08001]: [Microsoft][SQL Server Native Client 11.0]Named Pipes Provider: Could not open a connection to SQL Server [53]. ' in X:\server\htdocs\alert-interim\test.php:9 Stack trace: #0 X:\server\htdocs\alert-interim\test.php(9): PDO->__construct('sqlsrv:Server=7...', 'user', 'pass') #1 {main} thrown in X:\server\htdocs\alert-interim\test.php on line 9
我还在 Sql 服务器配置管理器中打开了命名管道并重新启动了服务,但无济于事。
我的这个问题的具体版本是通过两个步骤解决的:
- 必须在主机文件中创建一个条目。我对此有点含糊,因为它是由我的网络托管服务商的支持技术人员执行的,他们的回复很详细。在这一点上,我开始在我的脚本中收到不同的错误消息,这使我在 #2: 之后取得了成功
- 我必须给连接用户
db_owner
角色,like so (this post 让我走上正轨)。
现在我可以 运行 使用我最初发布的代码远程查询数据库,并指定端口:
$virtual_dsn = 'DRIVER={SQL Server};SERVER=12.34.56.78,1433;DATABASE=db';
$connection = odbc_connect($virtual_dsn,'user','pass') or die('ODBC Error:: '.odbc_error().' :: '.odbc_errormsg().' :: '.$virtual_dsn);
对我来说,手动添加端口后就可以了!它后面必须跟一个逗号。
$server = "server_ip" . ",1433";