我在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连接已正确初始化。