У меня есть настройка столбца 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.
Синтаксис кажется правильным, и тот факт, что он работает с SSMS, подтверждает это.
Что еще … хорошо, все методы XML требуют, чтобы некоторые конкретные параметры соединения были установлены, прежде чем они будут работать. А именно:
set quoted_identifier, ansi_nulls, ansi_warnings, ansi_padding, concat_null_yields_null, arithabort on;
set numeric_roundabort off;
Убедитесь, что ваши соединения из PHP инициализированы правильно.
Других решений пока нет …