【问题标题】:Error. Cannot connect to database: SQLSTATE[HYT00]错误。无法连接到数据库:SQLSTATE[HYT00]
【发布时间】:2018-05-26 10:02:36
【问题描述】:

尝试使用默认端口号连接到我的 Microsoft SQL Server 数据库时出现以下错误:

Error. Cannot connect to database: SQLSTATE[HYT00]: [unixODBC][Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired

这是我用来连接数据库的 PHP 代码:

<?php

class DB_Connect {
    private $db;

    function construct() {
    }

    public function connect() {
        require_once 'String.php';

        try {
            $this->db = new PDO('sqlsrv:Server=$server,1433; Database=$db', $user, $pass);
        } catch (PDOException $e) {
            return "Error. Cannot connect to database: " . $e->getMessage();
        }
    }
}

?>

我 100% 确定凭据是正确的,因为当我使用 xampp 在 localhost 上运行脚本时它们是有效的。

到目前为止我做了什么:

  • 在linux机器上安装了pdo驱动
  • 在linux机器上安装了obdc驱动
  • 在 linux 机器上安装了 sqlsrv 驱动程序

这是我在服务器上使用的配置:

PHP 版本 7.0.30 连接到 Gearhost 上托管的 SQL Server 2017。

谁能解释一下可能出了什么问题?

【问题讨论】:

  • 我认为只需将单引号改为双引号 $this->db = new PDO("sqlsrv:Server=$server,1433; Database=$db", $user, $pass) ;
  • 还是同样的错误
  • 您能否使用具有相同服务器名称和凭据的 SQL Server Management Studio 连接到 Gearhost 上托管的 SQL Server 2017?
  • 是的,当然可以。它适用于 SQL 服务器
  • 我认为问题可能与 SQL Server TCP/IP 动态端口配置有关。对不起,我无法重现你的场景(我没有 LINUX 机器)。我认为这个链接很有用:stackoverflow.com/questions/48651225/….

标签: php linux pdo sqlsrv


【解决方案1】:

基本上有2个问题:

  1. 首先,驱动程序没有正确安装。我需要通过 PECL 安装驱动程序。这就是我在 Redhat Cent OS 7 上安装它们的方式:

安装 PHP:

sudo su
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms
yum-config-manager --enable remi-php72
yum update
yum install php php-pdo php-xml php-pear php-devel re2c gcc-c++ gcc

安装先决条件

sudo yum-config-manager --enable rhel-server-rhscl-7-rpms
sudo yum install devtoolset-7
scl enable devtoolset-7 bash

为 SQL Server 安装 PHP 驱动程序

pecl download sqlsrv
tar xvzf sqlsrv-5.2.0.tgz
cd sqlsrv-5.2.0/
phpize
./configure --with-php-config=/usr/bin/php-config
make
sudo make install

安装Apache并重启服务

sudo yum install httpd
sudo apachectl restart

--编辑--

您也可以从 Github 项目页面下载预构建的二进制文件,或从 Remi 存储库安装:

sudo yum install php-sqlsrv php-pdo_sqlsrv
  1. 在我的情况下,我还必须从服务器数据库打开防火墙连接。检查是否有必要,从终端运行 sqlcmd 以连接到数据库。如果您使用正确的凭据出现网络错误,则说明您遇到了防火墙问题。

希望这对正在努力将 Linux 服务器连接到 SQL Server 的人有所帮助。

【讨论】:

  • 无需从pecl安装,如果你使用“remi”仓库,php-sqlsrv包提供了所需的二进制文件。
  • 我会将其作为编辑包含在我的答案中。顺便说一句,你的图书馆做得很好! ? 你做得很好!
【解决方案2】:

你可以在这里使用它吗?

try{
    $db = new PDO("sqlsrv:Server,1433=$server;dbname=$db;charset=utf8","$user","$pass");
    $query=$db->prepare("Some SQL String Here");
    $query->execute();
}catch(PDOException  $e ){
    echo "Error: ".$e;
}

【讨论】:

    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多