【问题标题】:PDO DBLIB accessing SQL Server 2008 and 2012PDO DBLIB 访问 SQL Server 2008 和 2012
【发布时间】:2013-07-04 00:44:34
【问题描述】:

经过大量阅读和搜索,我能够让 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

我错过了什么?

【问题讨论】:

  • PHP 中的 cli 和 sapi 模式可以有完全不同的配置。比较 php -i (cli) 和 phpinfo() (sapi) 设置,看看是否有任何差异。
  • 有什么办法可以让两者都一样吗?
  • 更改适当的 .ini 文件。 php -i/phpinfo 会告诉你正在使用什么(以及在哪里).ini 文件。
  • 他们都从 /etc/php.ini 读取 PHP.INI

标签: sql-server-2008 pdo


【解决方案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 是否阻塞了您的网络和数据库连接,请运行以下命令:

getsebool -a | grep httpd_can_network_connect

如果结果是:

httpd_can_network_connect --> 开启

httpd_can_network_connect_db --> 开启

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

【讨论】:

  • 非常感谢这个。这是 SELinux 第二次浪费我的生命
猜你喜欢
  • 1970-01-01
  • 2011-09-21
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2019-11-18
  • 2015-11-09
  • 1970-01-01
相关资源
最近更新 更多