【问题标题】:Laravel SQL Server: SQLSTATE[HY000]: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Protocol error in TDS streamLaravel SQL Server: SQLSTATE[HY000]: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]TDS 流中的协议错误
【发布时间】:2018-02-23 16:42:15
【问题描述】:

我正在尝试从远程服务器运行原始 SQL 查询。此时我不知道这是在哪个 SQL Server 版本上运行,但相信它是 2008 年。我正在尝试使用 Laravel 5.5 进行连接。在这一点上,我只想建立积极的联系。谁能指导我可能是什么问题?

我还尝试将 DB::raw 放在字符串中的 'select' 之后。这是我的查询字符串:

public function index()
{
    $query = DB::connection('sqlsrv')->select('
        SELECT "tProject"."ProjectName", "tProject"."CreatedDate", "tProject"."ProjectNumber", "tProjectEstByItem"."Qty", "tService"."ServiceCode", "tService"."Description", "tProjectItemRollup"."HoursApproved", "tProjectItemRollup"."Hours", "tProjectEstByItem"."Gross", "tProjectStatus"."ProjectStatus", "vw_flat_Project_Properties"."ClientPO", "tProjectEstByItem"."COGross", "tProjectEstByItem"."COQty", "tProject"."EstExpenses", "tProject"."EstLabor", "tProject"."ApprovedCOExpense" 
        FROM   (((("Workamajig"."dbo"."tProject" "tProject" 
        INNER JOIN "Workamajig"."dbo"."tProjectItemRollup" "tProjectItemRollup" 
        ON "tProject"."ProjectKey"="tProjectItemRollup"."ProjectKey") 
        INNER JOIN "Workamajig"."dbo"."tProjectStatus" "tProjectStatus" 
        ON "tProject"."ProjectStatusKey"="tProjectStatus"."ProjectStatusKey") 
        INNER JOIN "Workamajig"."dbo"."vw_flat_Project_Properties" "vw_flat_Project_Properties" 
        ON "tProject"."ProjectNumber"="vw_flat_Project_Properties"."ProjectNumber") 
        LEFT OUTER JOIN "Workamajig"."dbo"."tProjectEstByItem" "tProjectEstByItem" 
        ON ("tProjectItemRollup"."ProjectKey"="tProjectEstByItem"."ProjectKey") 
        AND ("tProjectItemRollup"."EntityKey"="tProjectEstByItem"."EntityKey")) 
        INNER JOIN "Workamajig"."dbo"."tService" "tService" 
        ON "tProjectItemRollup"."EntityKey"="tService"."ServiceKey" 
        WHERE  "tProject"."CreatedDate">={ts "2017-06-26 00:00:00"} 
        AND "tProject"."ProjectNumber" 
        LIKE "bigl%" 
        ORDER BY "tProject"."ProjectNumber", "tService"."Description" ');

    dd($query);
}

【问题讨论】:

  • “TDS 流中的协议错误”通常表示通信期间丢包。尝试一个不会返回很多结果的简单查询。 (此外,我使用 SQL Server 已经有几年了,但我认为查询中不需要任何括号。)

标签: php sql sql-server laravel laravel-5


【解决方案1】:

检查您是否指定了正确的端口号。我有 3306 而不是 1433

> DB_CONNECTION=sqlsrv
DB_HOST=
DB_PORT=1433
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

【讨论】:

  • 这个是救命稻草。
【解决方案2】:

我知道这篇文章是很久以前的了,但仍会尝试为未来的读者解决它。

首先,您需要检查本地服务器上是否安装了 pdo_sqlsrv 扩展(无论是 wamp 还是 xampp)。您可以在 xampp 上通过访问 URL“http://localhost/dashboard/phpinfo.php”并搜索“pdo_sqlsrv”来完成此操作,它通常位于“pdo_sqlite”扩展名下方。如果您没有看到 pdo_sqlsrv 扩展,请关注此帖子Connecting php 7.2 to MS SQL using sqlsrv

接下来是转到您的 .env 文件并设置

DB_CONNECTION=sqlsrv 也

DB_PORT=1433,

然后将 DB_HOST、DB_DATABASE、DB_USERNAME 和 DB_PASSWORD 设置为正确的凭据。

如果您在本地 PC 上安装了 MS SQL,请确保数据库引擎使用 SQL Server 身份验证而不是 Windows 身份验证,并通过点击此链接将 TCP/IP 端口修复为 1433 以查看其完成方式

SQLSTATE[08001]: [Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: No connection could be made because the target machine actively refused it.

重启 Laravel 服务器

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多