我正在开发某人的其他数据库,创建一个简单的PHP解决方案,运行Apache(XAMPP + Windows 2003 Server),连接到运行Windows 2008 R2的MS SQL SERVER数据库。
我已经工作了几天,我已经创建了几个表,我已经在这些表上插入了数据,但现在我正在尝试使用PHP将数据插入到现有表中,但对于此表中的特别是insert语句根本不起作用,但没有错误信息。
这是代码。
<?php
include '../../includes/mssql.php';
$insereItem = "INSERT INTO TBL_NOTAS_FATURAMENTO_ITENS (CD_LANCAMENTO ......... ) VALUES (26452,.....0)";
$stmt = sqlsrv_query( $conn, $insereItem);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
echo $insereItem . "\n";
?>
没有错误消息。
正如您所看到的,我已从insert语句中删除了数据,因此此处不会占用太多空间(要插入88个值)。没有错误消息,Apache日志中没有错误,php日志中没有错误,但数据未被提交。
正如您所看到的,我对语句执行了“回显”,因此如果我在SQL Server Management Studio中复制并粘贴该语句,则插件可以正常工作,但如果我尝试使用PHP,它将无效。
我正在尝试插入数据的表有一个插入触发器,我很确定这是问题,因为如果我禁用触发器,那么插件就可以正常工作(因此构建时没有错误插入命令)。
我已经尝试使用其他sqlsrv_命令,使用begin连接,准备,执行然后提交,结果是相同的。 sqlsrv_execute返回true,sqlsrv_prepare返回
PS:真正的代码不是上面那个,因为真正的代码使用数组来解析参数,但最终的insert语句是相同的,并且问题发生在任何一种方式。
以下是插入触发器的代码:(正如我之前所说,数据库不是由我构建的)
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER TRIGGER [TRG_TBL_NOTAS_FATURAMENTO_ITENS_REGINSERIR] ON [dbo].[TBL_NOTAS_FATURAMENTO_ITENS]
FOR INSERT
AS
IF EXISTS (SELECT 'TRUE' FROM INSERTED)
BEGIN
--SET NOCOUNT ON
--IF @@ROWCOUNT=0 RETURN
DECLARE @CD_LANCAMENTO AS INT
DECLARE @CD_FILIAL AS INT
DECLARE @CD_ITEM AS INT
DECLARE @CD_CME AS INT
DECLARE @CD_MATERIAL AS INT
DECLARE @CD_EMPRESA AS INT
DECLARE @CD_ID AS INT
DECLARE @DT_EMISSAO AS DATETIME
SELECT @CD_LANCAMENTO = (SELECT CD_LANCAMENTO FROM INSERTED)
SELECT @CD_EMPRESA = (SELECT CD_EMPRESA FROM DBO.TBL_NOTAS_FATURAMENTO WHERE (CD_LANCAMENTO = @CD_LANCAMENTO))
SELECT @CD_FILIAL = (SELECT CD_FILIAL FROM DBO.TBL_NOTAS_FATURAMENTO WHERE (CD_LANCAMENTO = @CD_LANCAMENTO))
SELECT @CD_ITEM = (SELECT CD_ITEM FROM INSERTED)
SELECT @CD_CME = (SELECT CD_CME FROM INSERTED)
SELECT @CD_MATERIAL = (SELECT CD_MATERIAL FROM INSERTED)
SELECT @CD_ID = (SELECT CD_ID FROM INSERTED)
SELECT @DT_EMISSAO = (SELECT DT_EMISSAO FROM DBO.TBL_NOTAS_FATURAMENTO WHERE (CD_LANCAMENTO = @CD_LANCAMENTO))
--CALCULA IMPOSTOS
EXEC SP_CALCULA_IMPOSTOS_NOTAS_FATURAMENTO @CD_LANCAMENTO, @CD_ITEM, @CD_CME, @CD_MATERIAL
--TOTAL DO LANCAMENTO
EXEC SP_TOTAL_NOTAS_FATURAMENTO @CD_LANCAMENTO
--ATUALIZA VOLUMES
EXEC SP_CALCULA_VOLUMES_NOTAS_FATURAMENTO @CD_LANCAMENTO, @CD_EMPRESA
--ATUALIZA KARDEX
EXEC SP_CALCULA_ESTOQUE 41, @CD_LANCAMENTO, @CD_ID, @DT_EMISSAO, @CD_FILIAL, @CD_MATERIAL
END