php - SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中

标签 php sql-server pdo freetds

将计算列添加到 SQL Server 2005 中的表后,我在 INSERT 上收到以下消息,仅通过 PHP(使用 PDO)它在 SQL Server Managment Studio 中工作正常。

为确保一切正确,我使用 SQL Server Profiler 设置了一个跟踪并将 INSERT 语句复制/粘贴到 SQL Server Managment Studio 中。它在 SSMS 中运行良好,但在 PHP 中继续失败。

Error adding contact: SQLSTATE[HY000]: General error: 1934 General SQL Server error: Check messages from the SQL Server [1934] (severity 16) [(null)]

最佳答案

原来问题与 SET 参数有关。我使用了从 Here 获得的以下代码.确定在 SQL Server Management Studio 中设置了哪些选项(插入工作的位置)。然后将它们中的每一个放在我的插入语句之前的 exec 中会使事情再次起作用。我不需要保留所有选项,所以下面我展示了使其正常工作所需的选项。

DECLARE @options INT
SELECT @options = @@OPTIONS

PRINT @options
IF ( (1 & @options) = 1 ) PRINT 'DISABLE_DEF_CNST_CHK' 
IF ( (2 & @options) = 2 ) PRINT 'IMPLICIT_TRANSACTIONS' 
IF ( (4 & @options) = 4 ) PRINT 'CURSOR_CLOSE_ON_COMMIT' 
IF ( (8 & @options) = 8 ) PRINT 'ANSI_WARNINGS' 
IF ( (16 & @options) = 16 ) PRINT 'ANSI_PADDING' 
IF ( (32 & @options) = 32 ) PRINT 'ANSI_NULLS' 
IF ( (64 & @options) = 64 ) PRINT 'ARITHABORT' 
IF ( (128 & @options) = 128 ) PRINT 'ARITHIGNORE'
IF ( (256 & @options) = 256 ) PRINT 'QUOTED_IDENTIFIER' 
IF ( (512 & @options) = 512 ) PRINT 'NOCOUNT' 
IF ( (1024 & @options) = 1024 ) PRINT 'ANSI_NULL_DFLT_ON' 
IF ( (2048 & @options) = 2048 ) PRINT 'ANSI_NULL_DFLT_OFF' 
IF ( (4096 & @options) = 4096 ) PRINT 'CONCAT_NULL_YIELDS_NULL' 
IF ( (8192 & @options) = 8192 ) PRINT 'NUMERIC_ROUNDABORT' 
IF ( (16384 & @options) = 16384 ) PRINT 'XACT_ABORT'

以下是我最终需要的选项:

$dbPDO->exec("SET ANSI_WARNINGS ON");                                                                               
$dbPDO->exec("SET ANSI_PADDING ON");
$dbPDO->exec("SET ANSI_NULLS ON");
$dbPDO->exec("SET QUOTED_IDENTIFIER ON");
$dbPDO->exec("SET CONCAT_NULL_YIELDS_NULL ON");

更新: 似乎 FK 约束导致了以下错误。上面也修复了这个错误。

SQLSTATE[HY000]: General error: 8624 General SQL Server error: Check messages from the SQL Server [8624] (severity 16) [(null)]

关于php - SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16054217/

相关文章:

php - Laravel v5.2.* (v5.2.29) Auth::guard ('api' )->attempt($user) fatal error

php - 一张表多字段还是两表少字段?

python - 有没有办法以编程方式删除 Azure 中的 SQL 数据库?

c# - 压缩 SQL Server 2005 查询结果?

php - Ajax 状态为 `success` 但回调无法正常工作

php pdo csv 文件写入数据库

php - mysql一起重复检查2列

php - 将 bootstrap 与 Composer 一起使用

sql - JOIN 的 ON 子句中引用的表的顺序是否重要?

php - PRESTASHOP:如何告诉 PDO 类通过套接字而不是 'localhost' 进行连接?