如何在PHP中通过ODBC连接到Server 2008?
问题描述:
我有一个远程服务器上运行IIS7和SQL Server 2008这我想通过ODBC连接到一个PHP脚本:如何在PHP中通过ODBC连接到Server 2008?
$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
另外:
- 我已经TCP下SQL Server配置管理器中启用/ IP, “SQL Server网络配置” - > “为MSSQL服务器协议”
- 我的本地环境是Windows 7上运行XAMPP与PHP 27年5月4日
- 端口1433已经在我的本地防火墙被打开
我一直在SQLSRV连接玩弄太多,但我似乎越来越近与ODBC。服务器上是否还有其他需要为ODBC连接设置的连接方法,或者连接方法是否有问题?
编辑:按照大安的评论,我尝试了切换连接方法PDO(但使用SQLSRV而是因为我在Windows上):
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 Server配置管理器中的管道并重新启动服务,但无济于事。
答
我这个问题的具体版本解决了两个步骤:
- 的条目曾在hosts文件被创建。我对此有点模糊,因为它是由我的虚拟主机中的技术支持人员执行的,他们的反应很轻。在这一点上,我开始接收我的剧本不同的错误信息而导致我的成功#2后:
- 我不得不放弃连接的用户
db_owner
角色,like so(this post让我在正确的轨道上)。
现在我可以远程对DB使用我最初发布的代码运行的查询,添加指定的端口:
$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);
尝试PDO'新PDO(“DBLIB:主机= yourhost; DBNAME =“。$ db,$ user,$ pass);' – Daan 2015-02-09 11:01:06
谢谢@Daan,我根据您的反馈更新了这个问题。 – praniclift 2015-02-09 11:19:30