【问题标题】:Laravel SQL Server Insert ErrorLaravel SQL Server 插入错误
【发布时间】:2016-12-14 15:56:42
【问题描述】:

我正在为 Eloquent 使用 Laravel 的 SQL Server 驱动程序并尝试读取和写入数据库。

我能够成功地从数据库中读取数据。

如果我将查询直接粘贴到我的数据库客户端 (Navicat) 中,我可以保存到数据库中。

但是,当我尝试通过 Eloquent 插入数据时出现错误。

//returns valid results
$results = DB::connection('next')->table('CMS_Tree')->get();

//throws exception
$sql = "INSERT INTO CMS_Tree (
            [NodeAliasPath], [NodeName], [NodeAlias], [NodeClassID], [NodeLevel], [NodeSiteID], [NodeGUID]
        ) VALUES (
            '/Home', 'Home', 'Home', 1095, 1, 1, '17B28018-C4DC-4896-ADAC-29F1E35B69BA'
        )";

$result = DB::connection('next')->statement($sql);

异常信息:

一般错误:1934 一般 SQL Server 错误:检查来自 SQL Server [1934](严重性 16)[(null)]

我对该错误的研究表明,我发送数据的方式可能存在问题,但我不确定如何进一步简化。


架构:

【问题讨论】:

  • 你能提供你的表结构吗?

标签: sql-server laravel eloquent


【解决方案1】:

我能够分两部分解决这个问题。

首先,我需要调试客户端在后台将哪些“SET”参数连同我的 sql 一起发送到服务器。隐藏的 SET 参数是插入通过客户端工作的原因,而不是来自我的 php 代码的原因。此答案向您展示了如何确定需要添加哪些 SET 参数:

SQL Server error 1934 occurs on INSERT to table with computed column PHP/PDO

其次,在我运行插入命令之前,我需要手动传递这些“SET”参数。我需要在一次或多次插入之前运行这段代码一次。就我而言,它看起来像这样:

$pdo = DB::connection('my-db-config-key')->getPdo();
$pdo->exec('SET ANSI_WARNINGS ON');
$pdo->exec('SET ANSI_PADDING ON');
$pdo->exec('SET ANSI_NULLS ON');
$pdo->exec('SET ARITHABORT ON');
$pdo->exec('SET QUOTED_IDENTIFIER ON');
$pdo->exec('SET ANSI_NULL_DFLT_ON ON');
$pdo->exec('SET CONCAT_NULL_YIELDS_NULL ON');
$pdo->exec('SET XACT_ABORT ON');

//run one or multiple inserts here

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多