Когда я использую SQL Profiler, я вижу все запросы, поступающие с сервера Debian, и могу выполнить их без каких-либо ошибок. Когда я выполняю SP из Apache / PHP + PDO, я получаю следующую ошибку:
SQLSTATE [HY000]: общая ошибка: 1934
Общая ошибка SQL Server: проверка
сообщения от SQL Server [1934]
(уровень серьезности 16) [(ноль)]
На самом деле ошибка не отображается должным образом. Настоящая ошибка должна выглядеть следующим образом:
Сообщение 1934 г., уровень 16, состояние 1, процедура
CALCUL_NOTATION_XML2, строка 38 SELECT
не удалось, потому что следующий SET
параметры имеют неверные настройки:
«CONCAT_NULL_YIELDS_NULL,
ANSI_WARNINGS, ANSI_PADDING '. проверить
что параметры SET являются правильными для использования
с индексированными представлениями и / или индексами на
вычисляемые столбцы и / или отфильтрованные
индексы и / или уведомления о запросах
и / или методы типа данных XML и / или
операции с пространственным индексом.
Мой SP выглядит примерно так:
CREATE PROCEDURE dbo.TEST_XML(
@MyXML XML
)
AS
BEGIN
SET @MyXML = '<SampleXML>
<Colors>
<Color1>White</Color1>
</Colors>
<Fruits>
<Fruits1>Apple</Fruits1>
</Fruits>
</SampleXML>'
SELECT
a.b.value('Colors[1]/Color1[1]','varchar(10)') AS Color1,
a.b.value('Fruits[1]/Fruits1[1]','varchar(10)') AS Fruits1,
FROM @MyXML.nodes('SampleXML') a(b)
END
Ошибка возникает только из-за способа подключения PDO к базе данных. Используются следующие параметры:
-- network protocol: TCP/IP
set quoted_identifier off
set arithabort off
set numeric_roundabort off
set ansi_warnings off
set ansi_padding off
set concat_null_yields_null off
set ansi_nulls off
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed
Интересно, можно ли изменить настройку входа в систему в PDO, чтобы она выглядела примерно так:
set quoted_identifier on
set arithabort on
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language Français
set dateformat dmy
set datefirst 1
set transaction isolation level read committed
Я прочитал на сайте , своего рода обходной путь, но мне интересно, есть ли реальное решение (например, настройка PDO, я не знаю, как заставить его работать).