Laravel 5.6框架,无法使用odbc_connect()连接到mssql服务器

时间:2018-02-08 11:52:51

标签: php sql-server laravel

尝试标准的Laravel数据库配置sqlsrv模板失败,我已经转移到直接的PHP odbc_connect()方法,尝试通过Laravel 5.6连接到我的工作mssql服务器。

我正在公司防火墙后面的工作中构建一个仪表板,另一位开发人员使用以下方法成功创建了一个连接:

$resource = odbc_connect('Driver={ODBC Driver 13 for SQL Server};Server=xxxxxxxxxx;Trusted_Connection=yes;ApplicationIntent=ReadOnly', null, null)

上面的odbc_connect()设置为使用我登录的当前网络AD Windows身份验证,但是,我从Laravel收到以下ErrorException:

odbc_connect(): SQL error: [Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired, SQL state S1T00 in SQLConnect

的phpinfo:

  • ODBC库:unixODBC
  • PDO驱动程序:mysql,odbc,sqlite,sqlsrv
  • PDO_ODBC:已启用,严格匹配
  • PHP Version 7.1.10

我可以成功连接MSSQL GUI客户端(RazorSQL和Navicat),它们都使用Windows身份验证方法。请注意,我正在运行MAC OSX Sierra。

我现在花了几天时间查看来自人们的论坛,请求和场景无济于事。

任何帮助都会受到很大的帮助!请让我知道在大海捞针中找到这根针所需的任何进一步信息。

1 个答案:

答案 0 :(得分:0)

找到位于obdcinst.ini文件中的SQL Server的ODBC驱动程序13,该文件链接到无法识别Windows身份验证的文件。解决方案是使用unixodbc生成安装freetds,它创建了一个识别身份验证的lib。然后我交换了lib。在身份验证后,我确实添加了用户名和密码,但是用户名有双反斜杠,因此,用户名将是YOURDOMAIN \ username。出于某种原因,Laravel会看到这个并将其视为域登录,同时删除反斜杠,请求被发送到服务器,然后允许自己成功登录以按预期执行查询。

希望这可以帮助处于同样情况的任何人。