使用php 5.2 mssql_query修改Sql Server 2005数据库中的xml列

时间:2014-09-23 03:49:34

标签: php sql sql-server xml xquery-sql

我在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变量。

1 个答案:

答案 0 :(得分:0)

语法似乎是正确的,并且它从SSMS起作用的事实证明了这一点。

还有什么......好吧,所有XML方法都要求在它们工作之前设置一些特定的连接选项。即:

set quoted_identifier, ansi_nulls, ansi_warnings, ansi_padding, concat_null_yields_null, arithabort on;
set numeric_roundabort off;

确保您的PHP连接已正确初始化。