2013-07-05 75 views
1

经过大量的阅读和搜索后,我能够在Centos 6.4 32位(有64位而不是32位的文档)中使用PDO DBLIB。令我惊讶的下面从shell命令($ PHP test.php的)代码工作访问SQL Server 2008和2012的PDO DBLIB

<?php 
try { 
    $conn = new PDO('dblib:host='.$host.':1433;dbname='.$db, $user, $pass); 

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

但是从Web浏览器我得到以下错误访问文件test.php的时候:

ERROR: SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)

我也能使用该命令的外壳连接到SQL服务器:

tsql -H 192.168.1.120 -p 1433 -U sa 

我缺少什么?

+0

PHP中的cli和sapi模式可以有完全不同的配置。比较'php -i'(cli)和'phpinfo()'(sapi)设置并查看是否有任何差异。 –

+0

有什么办法可以使两者都一样吗? –

+0

更改相应的.ini文件。 php -i/phpinfo会告诉你正在使用什么(和哪里).ini文件。 –

回答

1

在我的情况下,SELinux(我正在使用CentOS)阻止了连接,当从Linux框中的Apache Web服务器到Windows框中的sql服务器完成时。要允许进行连接,你有两种选择:

  1. 禁用SELinux

  2. 以根或sudo运行两个命令:

setsebool -P httpd_can_network_connect 1

setsebool -P httpd_can_network_connect_db 1

要检查SELinux禁止网络和DB连接运行此命令:

getsebool -a | grep httpd_can_network_connect

如果结果是:

httpd_can_network_connect --> on

httpd_can_network_connect_db --> on

你好,如果是关闭然后运行这个答案的第一个命令。

+0

非常感谢这个。这是SELinux第二次浪费了我一生的时间 –