如何在Laravel中使用SQL Server连接


How to use SQL Server connection in Laravel?

我在Laravel 3中做了一个工作项目,我必须切换到MsSQL Server(不过不是我的调用,sniff…),我不理解这个数据库类型上的Laravel配置。。。

我将database.php中的默认值更改为'default' => 'sqlsrv',然后在sqlsrv阵列中配置了主机、数据库、用户名和密码,但随后我收到了以下错误消息:

此扩展要求Microsoft SQL Server 2012 Native Client ODBC驱动程序与SQL Server `通信

经过一番研究,我发现我们需要SQLSRV的PDO,我已经有了5.4版本的PDO。在我的phpinfo中,我得到了返回的pdo_sqlsrv support : enabled,所以这似乎都是正确的,但同时它似乎要求ODBC SQLSRV连接,我真的必须使用它吗?

我宁愿直接从Laravel数据库连接。。。但是,即使我需要它,并且我创建了一些到服务器的ODBC连接,我该如何将它们放入我的配置中?以下是我的配置(当然my...被我的真实细节所取代):

'sqlsrv' => array(
    'driver'   => 'sqlsrv',
    'host'     => 'myServerIP', 
    'database' => 'myDatabase',
    'username' => 'myUsername',
    'password' => 'myPassword',
    'prefix'   => '',
 ),

任何帮助都将不胜感激,我发现的唯一接近我的问题的是Laravel论坛上的这个链接:SQL Server上的Laravel查询,但随后它就停止了,没有给出任何配置。

这就是我将Laravel应用程序连接到MS SQL Server时所做的:

  1. sudo apt-get更新

  2. sudo apt-get-install php5-sybase

如果您尝试安装php5-mssql,它无论如何都会安装php5-sybase,它是"php5的sybase/MS SQL Server模块"。

这将使Laravel使用dblib驱动程序而不是sqlsrv。

查看此文件以获取参考Illuminate''Database''Connectors''SqlServerConnector.php.

  1. 打开此文件:/etc/freetds/freetds.conf

[global]段和tds version = 4.2

添加tds version = 8.0(不带;行首半列)

并将客户端charset = UTF-8添加到上述行的正下方(不包括;该行开头的半列)

这可以让驱动程序对utf-8中的所有数据进行编码,并避免数据中的奇怪字符

文件将如下所示:

[global]
        # TDS protocol version
;       tds version = 4.2
        tds version = 8.0
        client charset = UTF-8
  1. /etc/freetds目录中创建文件locales.conf,并在其中经过以下步骤:(这允许使用SQL Server正确解析日期)

[default]
    date format = %Y-%m-%d %I:%M:%S.%z
[en_US]
    date format = %b %e %Y %I:%M:%S:%z%p
    language = us_english
    charset = iso_1

  1. 编辑php.ini文件

首先使用php-i|grep-php.ini查找文件

然后打开文件并搜索mssql.charset(它可能会像这样被禁用;mssql.chardset="ISO-8859-1"

使其mssql.charset="UTF-8"<lt;请确保删除;半列以启用它>gt;

保存并退出

  1. 现在重新启动您的服务器(nginx或apache或php-fpm)

  2. 当然,您知道需要将数据库配置设置为默认使用sqlsrv 'default' => 'sqlsrv',,并添加凭据。


其他方法:

可以使用ODBC驱动程序连接

这是个不错的包裹https://github.com/ccovey/odbc-driver

Ahh经过更多的研究,我发现我的SQL Server Native Client 10.0驱动程序已经过时,不足以连接到带有PDO的MsSQL Server 2008,您需要至少有11.0版本才能连接到SQL Server 2005+

如果您想验证您的驱动程序版本,您可以浏览Control Panel >> Administrative Tools >> Data Sources (ODBC),然后单击Drivers选项卡,找出您已经安装的SQL Server Native Client。如果你想更新你的驱动程序,根据你的操作系统配置,你可以选择下面的正确链接。。。

SQL Server 2012本机客户端
x86(32位)包http://go.microsoft.com/fwlink/?LinkID=239647&clcid=0x409
x64(64位)程序包http://go.microsoft.com/fwlink/?LinkID=239648&clcid=0x409

对于Linux,Laravel 5和php 7.1:

  1. 按此处所述添加连接
  2. sudo apt install php7.1-sybase
  3. 重试:)

获得解决方案。试试这个

  1. 单击创建的实例的协议

    参考:https://i.stack.imgur.com/O6Dyn.png

  2. 启用IP设置

    参考:https://i.stack.imgur.com/64j11.png

  3. 右键单击IP设置>属性>IP地址>IP全部>IP端口:将其设置为1433作为默认的SQL Server数据库端口。

    参考:https://i.stack.imgur.com/ZQ7MR.png

希望它能有所帮助。非常感谢。