我在SQL Server 2005数据库的表中设置了xml列,我试图通过php 5.2将节点添加到xml树。 xml的结构由名为" YearsAttended"的根节点组成。和名为"年"的子节点。下面是我正在运行的当前sql脚本。
DECLARE @PID int
SET @PID = 8112
IF (SELECT Years FROM YearsAttended WHERE ParticipantID=@PID) IS NULL
UPDATE YearsAttended Set Years = '<YearsAttended></YearsAttended>'
WHERE ParticipantID = @PID;
UPDATE YearsAttended
SET Years.modify('insert <year>2003</year> as first into (/YearsAttended)[1]')
WHERE ParticipantID = @PID;
第一个UPDATE语句工作正常但是我无法让第二个更新语句在php 5.2中工作。但是,它在针对同一数据库时通过SQL Server Management Studio工作。
我目前使用的php代码如下:
$yaQuery = "DECLARE @PID int
SET @PID = 8112
IF (SELECT Years FROM YearsAttended WHERE ParticipantID=@PID) IS NULL
UPDATE YearsAttended Set Years = '<YearsAttended></YearsAttended>'
WHERE ParticipantID = @PID;
UPDATE YearsAttended
SET Years.modify('insert <year>2015</year> as first into (/YearsAttended)[1]')
WHERE ParticipantID = @PID;";
$yaResult = mssql_query($yaQuery);
if(!$yaResult)
{
die("Error: " . mssql_get_last_message());
}
没有抛出任何错误,但未插入节点<year>2015</year>
php 5.2中的<YearsAttended></YearsAttended>
。我也尝试将查询分成2个不同的mssql_query调用,但同样的问题也出现了。我对php很新,所以我不会怀疑我是否忽略了某些东西。有什么想法吗?
注意:8112和2015将替换为php变量。
答案 0 :(得分:0)
语法似乎是正确的,并且它从SSMS起作用的事实证明了这一点。
还有什么......好吧,所有XML方法都要求在它们工作之前设置一些特定的连接选项。即:
set quoted_identifier, ansi_nulls, ansi_warnings, ansi_padding, concat_null_yields_null, arithabort on;
set numeric_roundabort off;
确保您的PHP连接已正确初始化。