2014-09-23 52 views
0

我在SQL Server 2005數據庫的表中有一個xml列設置,我嘗試通過php 5.2向xml樹添加一個節點。 xml的結構由一個名爲「YearsAttended」的根節點和一個名爲「year」的子節點組成。下面是我正在運行的當前sql腳本。使用PHP 5.2在Sql Server 2005數據庫中修改xml列mssql_query

DECLARE @PID int 
SET @PID = 8112 
IF (SELECT Years FROM YearsAttended WHERE [email protected]) 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 [email protected]) 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>沒有插入 <YearsAttended></YearsAttended>在PHP 5.2。我也嘗試將查詢分隔成2個不同的mssql_query調用,但同樣的問題發生。我相當新的PHP,所以我不會懷疑,如果我忽略了一些東西。有任何想法嗎?

注意:8112和2015將被替換爲php變量。

+0

在之間添加GO語句並檢查 – radar 2014-09-23 04:16:02

回答

0

語法似乎是正確的,並且它從SSMS起作用的事實證明了這一點。

還有什麼......好吧,所有的XML方法都需要一些特定的連接選項才能工作。即:

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

請確保您的PHP連接正確初始化。