原來問題與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編寫設置。例如:$ dbPDO-> exec(「SET ANSI_WARNINGS ON」); – jjwdesign
我會把這個放在哪裏?在特定的文件或服務器上? – bleykFaust