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


Modify xml column in Sql Server 2005 database using php 5.2 mssql_query

我在SQLServer2005数据库的一个表中设置了一个xml列,我正试图通过php5.2向xml树添加一个节点。xml的结构由名为"YearsAttented"的根节点和名为"year"的子节点组成。下面是我正在运行的当前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语句运行良好,但是我无法使第二个UPDATE语句在php5.2中运行。但是,它确实可以通过SQLServerManagementStudio工作,同时针对相同的数据库。

我目前使用的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>。我还尝试将查询分为两个不同的mssql_query调用,但出现了相同的问题。我是php的新手,所以我不会怀疑我是否忽略了什么。有什么想法吗?

注意:8112和2015将替换为php变量。

语法似乎是正确的,它在SSMS中工作的事实证明了这一点。

还有什么。。。好吧,所有的XML方法都需要设置一些特定的连接选项才能工作。即:

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

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