Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 mssql+php  [new]
joker63
Member

Откуда:
Сообщений: 42
Добрый день.

Есть хранимая процедура которая выполняется по php скрипту. (пользователь регистрируется в программе, мне на почту приходит письмо, нажимаю "подтвердить" и запускается php скрипт который создает пользователя и т.п.).

Собственно, если хранимку запускать из студии, то все прекрасно работает, но если запускать из php скрипта, то результат не возвращается.

Вот кусок кода в котором вся эта проблема (сильно урезан и упрощен xD)
set @ii=null --для наглядности, что в следующий блок попасть не должно
if @ii is not null begin
		insert into T_CLIENTS (S_NAME1)
		values('Пользователь1')

		set @ii=1
		
	end else set @tt='Такой заявки или нет (и не было) или она уже обработана.'


Если есть запись с инсертом в T_CLIENTS, то скрипт не принимает никаких результатов. если закомментировать то все норм.
Повторюсь, что данная хранимка совершенно нормально отрабатывает из Management Studio.
Решил поставить костыль и вынести инсерт в отдельную процедуру, вынес, скрипт работает норм, возвращает результат, но инсерта в T_clients нет :(.
Добавлю, что в процедуре есть еще инсерты в другие отношения и они работают нормально.


Все другие скрипты работают хорошо.
28 авг 14, 13:05    [16506473]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Glory
Member

Откуда:
Сообщений: 104760
joker63
Вот кусок кода в котором вся эта проблема (сильно урезан и упрощен xD)

Здесь нет никакого возврата результата

joker63
Повторюсь, что данная хранимка совершенно нормально отрабатывает из Management Studio.

Значит проблема в вашем php

joker63
Решил поставить костыль и вынести инсерт в отдельную процедуру, вынес, скрипт работает норм, возвращает результат, но инсерта в T_clients нет :(.

"нет инсерта" - это
- команда insert into завершается ошибкой ?
- команда insert into вообще не запускается ?
- нет записи в таблице, хотя ни 1ое, ни 2ое не проиходят ?
28 авг 14, 13:08    [16506506]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
joker63
Member

Откуда:
Сообщений: 42
joker63
Решил поставить костыль и вынести инсерт в отдельную процедуру, вынес, скрипт работает норм, возвращает результат, но инсерта в T_clients нет :(.

"нет инсерта" - это
- команда insert into завершается ошибкой ?
- команда insert into вообще не запускается ?
- нет записи в таблице, хотя ни 1ое, ни 2ое не проиходят ?[/quot]



Извиняюсь, не правильно выразился.
1)
 set @ii=null --для наглядности, что в следующий блок попасть не должно
if @ii is not null begin
		insert into T_CLIENTS (S_NAME1)
		values('Пользователь1')

		set @tt='good'
	end else set @tt='Такой заявки или нет (и не было) или она уже обработана.'
        select @tt


так как @ii=null, то должно вывести:'Такой заявки или нет (и не было) или она уже обработана.'. Из студии так и просходит, из php ничего не возвращается.
а) Если закомментировать код с инсертом, то php отработает нормально.
б) Если вывести код с инсертом другую процедуру, то php снова нормально выполнится и покажет что заявка уже отработана.



2)
 set @ii=1--пусть будет 1.
if @ii is not null begin
		insert into T_CLIENTS (S_NAME1)
		values('Пользователь1')

		set @tt='good'
	end else set @tt='Такой заявки или нет (и не было) или она уже обработана.'
        select @tt


так как @ii=1, то должно вывести:'good'. Из студии так и просходит, из php ничего не возвращается.
а) Если закомментировать код с инсертом, то php отработает нормально.
б) Если вывести код с инсертом другую процедуру, то php выведет 'good', но инсерта в T_clients не будет.
28 авг 14, 13:25    [16506656]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Glory
Member

Откуда:
Сообщений: 104760
joker63
так как @ii=null, то должно вывести:'Такой заявки или нет (и не было) или она уже обработана.'. Из студии так и просходит, из php ничего не возвращается.

Команда присвоения значения переменной ничего никуда вывести не может.

joker63
а) Если закомментировать код с инсертом, то php отработает нормально.

Нормальный клиентский код умеет обрабатывать множественные возвращаемые результаты. А не только первый.

joker63
б) Если вывести код с инсертом другую процедуру, то php выведет 'good', но инсерта в T_clients не будет.


"нет инсерта" - это
- команда insert into завершается ошибкой ?
- команда insert into вообще не запускается ?
- нет записи в таблице, хотя ни 1ое, ни 2ое не проиходят ?
28 авг 14, 13:29    [16506701]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
o-o
Guest
joker63,

где-то далее по тексту у вас имеется SELECT @tt, проверьте.
он и выводит значение @tt, а никак не set @tt.
может, оно у вас хочет SET NOCOUNT ON?
я так понимаю, у ТС, когда проходит INSERT, "результат не возвращается" = "исчезает" вывод @tt или не знаю еще чего,
короче, как только имеются обработанные строки, так нету вывода какого-то еще селекта
28 авг 14, 13:59    [16506930]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
joker63
Member

Откуда:
Сообщений: 42
Проблема решена, спасибо.

Посмотрел в логах Apache, там было:
PHP Warning: mssql_query(): message: INSERT failed because the following SET options have incorrect settings: 'ANSI_WARNINGS, ANSI_PADDING'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations. (severity 16) in /var/www/pas/pas_set_new_user.php on line 19
PHP Warning: mssql_query(): General SQL Server error: Check messages from the SQL Server (severity 16) in /var/www/pas/pas_set_new_user.php on line 19
PHP Warning: mssql_query(): Query failed in /var/www/pas/pas_set_new_user.php on line 19



добавил переда запросом
mssql_query('SET ANSI_PADDING, ANSI_WARNINGS ON;')

и все заработало
29 авг 14, 09:57    [16510825]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Диам
Member

Откуда:
Сообщений: 1422
joker63, вот поток сознания открывшийся в результате епли с php-вызовом хранимок сайтом, подключающимся к SQL из под линукса:
	--В этой функции вызывается функция [........], в которой происходит вставка данных в таблицу, которая имеет вычисляемый столбец
	--Если системные переменные не будут установлены в эти значения по умолчанию, то добавление данных в ту таблицу будет запрещено
	--При вызове этой функции с сайта, работающего на линуксе и использующего для доступа к базе DB-Labrary, системные переменные 
		--имеют другое значение по умолчанию и их надо назначить вручную.	
	--Интересный момент: установить эти переменные надо до вызова этой функции, т.е. сейчас. Установка их внутри функции ничего не дает.
		SET ANSI_NULLS ON
		SET ANSI_PADDING ON
		SET ANSI_WARNINGS ON
		SET ARITHABORT ON
		SET CONCAT_NULL_YIELDS_NULL ON
		SET QUOTED_IDENTIFIER ON
		SET NUMERIC_ROUNDABORT OFF	

и еще немного:
	--включаем разрешение на вставку Null-Значений в таблицы, когда это разрешение явно не задано
	--после перехода на сайт под Юниксом возникла проблема, что вызываемые с сайта процедуры  не позволяют вставлять Null Значения в таблицы. Это должно быть решением
	SET ANSI_NULL_DFLT_ON ON; 
29 авг 14, 23:02    [16515356]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Glory
Member

Откуда:
Сообщений: 104760
Диам
--Интересный момент: установить эти переменные надо до вызова этой функции, т.е. сейчас. Установка их внутри функции ничего не дает.

Это безграмотный "момент"
30 авг 14, 00:40    [16515513]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Диам
Member

Откуда:
Сообщений: 1422
Glory, всегда восхищают ваши красноречивые комментарии, без какой бы то ни было попытки объяснить сирым и убогим в чем причина их заблуждения.
30 авг 14, 09:51    [16515761]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Glory
Member

Откуда:
Сообщений: 104760
Диам
Glory, всегда восхищают ваши красноречивые комментарии, без какой бы то ни было попытки объяснить сирым и убогим в чем причина их заблуждения.

Вы тоже не знаете, что существует оффициальный хелп продукта, где каждый SET подробно описан ?
30 авг 14, 11:35    [16515851]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Диам
Member

Откуда:
Сообщений: 1422
Glory, когда человек не знает в чем проблема "нерабочести" откуда он узнает, что надо читать про именно про SET ?
30 авг 14, 13:34    [16516060]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Glory
Member

Откуда:
Сообщений: 104760
Диам
когда человек не знает в чем проблема "нерабочести" откуда он узнает, что надо читать про именно про SET ?

Из сообщения об ошибке, откуда же еще
INSERT failed because the following SET options have incorrect settings

А вот откуда вы узнали, что "установить эти переменные надо до вызова этой функции, т.е. сейчас. Установка их внутри функции ничего не дает.", вот это действительно неизвестно

Сообщение было отредактировано: 30 авг 14, 13:55
30 авг 14, 13:54    [16516077]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Диам
Member

Откуда:
Сообщений: 1422
Методом тыка, Glory, методом тыка... Может быть не для всех этих переменных мое утверждение справедливо, но установка таких значений внутри нужной функции результата не давали, а установка в функции, которая вызывала нужную результат дала.
30 авг 14, 19:09    [16516341]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Glory
Member

Откуда:
Сообщений: 104760
Диам
Методом тыка, Glory, методом тыка...

Вот и не надо свои фиговые методы предлагать другим

Диам
Может быть не для всех этих переменных мое утверждение справедливо,

В хелпе даже написано для каких
30 авг 14, 21:52    [16516647]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Диам
Member

Откуда:
Сообщений: 1422
Glory, браво, вы как всегда, вместо указания на ошибку/заблуждение/да просто правильный ответ, множите количество своих бесполезных постов.
Это, конечно же, нисколько не умаляет и ваших полезных ответов, да.
30 авг 14, 22:13    [16516706]     Ответить | Цитировать Сообщить модератору
 Re: mssql+php  [new]
Glory
Member

Откуда:
Сообщений: 104760
Диам
Glory, браво, вы как всегда, вместо указания на ошибку/заблуждение/да просто правильный ответ, множите количество своих бесполезных постов.

А ваши посты мало того, что бесполезны, так еще и безграмотны и вредны.
Копировать сюда статьи хелпа я не намерен.
31 авг 14, 23:22    [16518325]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить