1

经过大量阅读和搜索后,我能够让 PDO DBLIB 在 Centos 6.4 32 位中工作(有很多 64 位文档而不是 32 位文档)。令我惊讶的是,以下代码从shell 命令($ PHP test.php)工作

<?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();
}

但是当从网络浏览器访问文件 test.php 时,我收到以下错误:

错误:SQLSTATE[HY000] 无法连接:Adaptive Server 不可用或不存在(严重性 9)

我还可以使用以下命令从 shell 连接到 SQL Server:

tsql -H 192.168.1.120 -p 1433 -U sa

我错过了什么?

4

1 回答 1

1

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

  1. 禁用 SELinux

  2. 以 root 或 sudo 身份运行以下两个命令:

setsebool -P httpd_can_network_connect 1

setsebool -P httpd_can_network_connect_db 1

要检查 SELinux 是否阻塞了您的网络和数据库连接,请运行以下命令:

getebool -a | grep httpd_can_network_connect

如果结果是:

httpd_can_network_connect --> 开启

httpd_can_network_connect_db --> 开启

你很好,如果关闭,那么运行这个答案中的第一个命令。

于 2013-07-12T19:36:36.920 回答