Измените столбец xml в базе данных Sql Server 2005, используя php 5.2 mssql_query

У меня есть настройка столбца xml в таблице базы данных SQL Server 2005, и я пытаюсь добавить узел в дерево xml через php 5.2. Структура xml состоит из корневого узла с именем «YearsAttended» и дочерних узлов с именем «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 работает нормально, однако я не могу заставить второй оператор обновления работать в 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> не вставляется в
<YearsAttended></YearsAttended> в php 5.2. Я также попытался разделить запрос на 2 разных вызова mssql_query, но возникает та же проблема. Я довольно новичок в php, поэтому я не сомневаюсь, что я что-то пропускаю. Есть идеи?

Заметка: 8112 и 2015 будут заменены переменными php.

0

Решение

Синтаксис кажется правильным, и тот факт, что он работает с SSMS, подтверждает это.

Что еще … хорошо, все методы XML требуют, чтобы некоторые конкретные параметры соединения были установлены, прежде чем они будут работать. А именно:

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

Убедитесь, что ваши соединения из PHP инициализированы правильно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]