23

我有一个在 Laravel 3 中制作的工作项目,我必须切换到 MsSQL Server(虽然不是我的电话,嗅探......)而且我不了解这种数据库类型的 Laravel 配置......

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

此扩展需要 Microsoft SQL Server 2012 Native Client ODBC 驱动程序才能与 SQL Server 进行通信`

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

我宁愿直接从 Laravel 数据库连接进行连接......但即使我需要它并且我创建了一些到服务器的 ODBC 连接,我如何将它们放入我的配置中?这是我的配置中的内容(当然my...是替换为我的真实详细信息):

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

任何帮助将不胜感激,我发现与我的问题最接近的唯一一件事是来自 Laravel 论坛的链接:Laravel query on SQL Server但它只是停止而没有提供任何配置。

4

4 回答 4

20

这就是我将 Laravel 应用程序连接到 MS SQL Server 的方法:

  1. sudo apt-get 更新

  2. sudo apt-get install php5-sybase

如果您尝试安装 php5-mssql,它仍然会安装 php5-sybase,它是“Sybase / MS SQL Server module for php5”。

这将使 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.charset = "ISO-8859-1"     )

使其成为 mssql.charset = "UTF-8"    <<确保删除 ; 半栏启用它>>

保存并退出

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

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


其他方法:

您可以使用 ODBC 驱动程序进行连接

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

于 2015-09-14T00:05:01.673 回答
11

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

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

SQL Server 2012 Native Client
x86(32 位)包http://go.microsoft.com/fwlink/?LinkID=239647&clcid=0x409
x64(64 位)包http://go.microsoft.com/fwlink/?LinkID= 239648&clcid=0x409

于 2013-08-13T19:43:46.430 回答
2

对于 Linux、Laravel 5和 php 7.1:

  1. 按照此处的说明添加连接
  2. sudo apt install php7.1-sybase
  3. 再试一次 :)
于 2017-05-03T17:21:56.373 回答
1

得到了解决方案。尝试这个!

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

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

  2. 启用 IP 设置

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

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

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

希望它会有所帮助。谢谢!

于 2019-10-10T15:17:07.190 回答