Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
Доброго времени суток Всем !

Есть некий запрос:
SELECT
	c.[Name] AS cat_title,
	b.[Name] AS brand_title,
	m.[Name] AS model_title,
	neisp.[Name] AS neispravnost,
	REPLACE(srv.[Name], c.[Name] + '-', '') AS rekomen,
	MIN (z.[Summa245599774000]) AS min_sum,
	MAX (z.[Summa245599774000]) AS max_sum,
	COUNT (*) AS rec_count,
	UPPER ( c.[Name] + ' ' + b.[Name] + ' ' + m.[Name] + ' ' + neisp.[Name] + REPLACE(srv.[Name], c.[Name] + '-', '')	) AS search_field
FROM
	[ClarisMS].[dbo].[tblZajavki_Desk4233325000] z
LEFT JOIN [ClarisMS].[dbo].[tblVid_zajavki17622187000] c ON c.[OId] = z.[Vid_zajavki17622289000]
LEFT JOIN [ClarisMS].[dbo].[tblBrendy4437262000] b ON b.[Oid] = z.[Brend221595480000]
LEFT JOIN [ClarisMS].[dbo].[tblModeli_HO4435640000] m ON m.[OId] = z.[Model221598073000]
LEFT JOIN [ClarisMS].[dbo].[tblNeispravnosti264849027000] neisp ON neisp.[OId] = z.[Zajavlennaja_neispravnost264849329000]
LEFT JOIN [ClarisMS].[dbo].[tblServisy_Mobi03237571390000] srv ON srv.[OId] = z.[Rekomendacija264849586000]
WHERE
	(
		z.Status4241906000 = 221651756000
		OR z.Status4241906000 = 221651763000
	)
AND UPPER (	c.[Name] + ' ' + b.[Name] + ' ' + m.[Name] + ' ' + neisp.[Name] + ' ' + REPLACE(srv.[Name], c.[Name] + '-', '')) LIKE N'%РЕМОНТ ТЕЛЕФОНОВ%'
AND UPPER (	c.[Name] + ' ' + b.[Name] + ' ' + m.[Name] + ' ' + neisp.[Name] + ' ' + REPLACE(srv.[Name], c.[Name] + '-', '')) LIKE N'%SAMSUNG%'
AND UPPER (	c.[Name] + ' ' + b.[Name] + ' ' + m.[Name] + ' ' + neisp.[Name] + ' ' + REPLACE(srv.[Name], c.[Name] + '-', '')) LIKE N'%GALAXY S4%'
AND UPPER (	c.[Name] + ' ' + b.[Name] + ' ' + m.[Name] + ' ' + neisp.[Name] + ' ' + REPLACE(srv.[Name], c.[Name] + '-', '')) LIKE N'%РАЗБИТ%'
AND UPPER (	c.[Name] + ' ' + b.[Name] + ' ' + m.[Name] + ' ' + neisp.[Name] + ' ' + REPLACE(srv.[Name], c.[Name] + '-', '')) LIKE N'%9500%'
GROUP BY
	c.[Name], 	b.[Name], 	m.[Name], 	neisp.[Name], 	REPLACE(srv.[Name], c.[Name] + '-', '')


Этот запрос выполняю в SQLMANAGEMENT, запрос возвращает 65 строк (записей).

Теперь, запрос отправляется на эту же базу через php (php ver 5.5.9, Yii framework, dblib - драйвер для mssql). Перед отправкой запрос переконвертируется путем iconv("UTF-8","CP1251",$query). Но результатом возвращается 87 (!!!!!!!) строк (записей).

Скрины параметров MSSQL: http://c2n.me/jb0rlR

Настройки php: http://c2n.me/jb0vmG

Строка подключения: http://c2n.me/jb0wLB


Сталкивался ли кто нибудь ранее подобным случаем ? и откуда такое может быть ?
29 окт 14, 09:30    [16770947]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
Glory
Member

Откуда:
Сообщений: 104751
max aka max
Теперь, запрос отправляется на эту же базу через php

А какой запрос приходит на сервер, вы смотрели ?

Сообщение было отредактировано: 29 окт 14, 09:32
29 окт 14, 09:32    [16770963]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
Glory,

на сервер такой же запрос приходит, оттуда скопирую и выполняю, ответ 65 строк.

На Виндовс сервере (Openserver) выполняю это же php скрипт, ответ нормальный (65 строк) , только вот в убунту серверах кол-во записей 87 строк.
29 окт 14, 09:38    [16771004]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
Glory
Member

Откуда:
Сообщений: 104751
max aka max
на сервер такой же запрос приходит,

Это вы где увидели ? В профайлере ?
29 окт 14, 09:40    [16771015]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
Glory,

да, в профайлере.
29 окт 14, 09:41    [16771021]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
Glory,
http://ipic.su/img/img7/fs/kiss_68kb.1414556839.png
29 окт 14, 09:41    [16771025]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
Glory
Member

Откуда:
Сообщений: 104751
max aka max
Glory,
http://ipic.su/img/img7/fs/kiss_68kb.1414556839.png

Это другой запрос
куда делить N перед символьными константами ?
29 окт 14, 09:43    [16771033]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
Glory
max aka max
Glory,
http://ipic.su/img/img7/fs/kiss_68kb.1414556839.png

Это другой запрос
куда делить N перед символьными константами ?


Сорри старого запроса отправил, я итак пробовал и эдак, но все равно кол-во результатов отличаются.
29 окт 14, 09:50    [16771076]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
Glory
Member

Откуда:
Сообщений: 104751
max aka max
я итак пробовал и эдак,

Одинаковые запросы выдают одинаковые результаты
29 окт 14, 10:03    [16771136]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
Glory,

поэтому я и фигею , запросы одинаковы !!!! Я сам проверял что приходит в Базу и что я выполняю сам, побайтово они идентичны!!!
29 окт 14, 10:06    [16771155]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
Glory
Member

Откуда:
Сообщений: 104751
Значит
- либо запросы все таки разные
- либо исходные данные для запросов разные
29 окт 14, 10:08    [16771177]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
max aka max,

Опции соединения сравнивайте. Особенно CONCAT_NULL_YIELDS_NULL.
29 окт 14, 10:10    [16771183]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
invm
max aka max,

Опции соединения сравнивайте. Особенно CONCAT_NULL_YIELDS_NULL.


а где это проверять ? только что выполнил запрос: SELECT TOP 100 * FROM [ТАБЛИЦА] , такой запрос норм выполняется.
29 окт 14, 10:43    [16771382]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
max aka max
а где это проверять ?
В профайлере. EventClass - ExistingConnection.
29 окт 14, 10:49    [16771436]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
invm,

Проблема до сих пор не решена...

Скриншот кода скрипта: http://c2n.me/jb6ffj (результат выполнения 19 записей http://c2n.me/jb6ikt )

После выполнения скрипта, я из профайлера получаю запрос который приходит в Базу.

Скриншот из профайлера: http://c2n.me/jb6cFJ

Запрос из профайлера копирую и выполняю в SQLMANAGEMENT (кол-во результатов 15 записей - и это правильный ответ).
29 окт 14, 13:29    [16772485]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
max aka max
Проблема до сих пор не решена...
Вам уже писали: одинаковые запросы на одинаковых данных при одинаковых опциях соединения вернут одинаковые результаты. Есть исключения, но к вашему случаю они не относятся.
Ваша задача найти какие из этих условий не соблюдаются. Никто за вас это не сделает.
29 окт 14, 13:46    [16772565]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
invm,

Специально сел и скопировал обе запросы в две разные переменные и сравнил их побайтово, все идентично.
29 окт 14, 13:52    [16772602]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3695
А "лишние" 22 строчки анализировали? Они удовлетворяют вашему условию?
29 окт 14, 13:58    [16772639]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
invm
max aka max
Проблема до сих пор не решена...
Вам уже писали: одинаковые запросы на одинаковых данных при одинаковых опциях соединения вернут одинаковые результаты. Есть исключения, но к вашему случаю они не относятся.
Ваша задача найти какие из этих условий не соблюдаются. Никто за вас это не сделает.


этот же скрипт когда выполняется на виндовс сервере возвращает нормальный результат ( 15 записей ).
29 окт 14, 13:59    [16772648]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
Arm79,

хмммм,... да они устраивают, я просто не могу понять почему когда скрипт выполняется на Linux сервере кол-во записей много, а когда запрос выполняется в SQLMANAGEMENT или скрипт запускается на виндовс сервере, кол-во записей одинаковы, но отличаются от тех которые выдавались на линуксе.
29 окт 14, 14:01    [16772663]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3695
max aka max
Arm79,

хмммм,... да они устраивают, я просто не могу понять почему когда скрипт выполняется на Linux сервере кол-во записей много, а когда запрос выполняется в SQLMANAGEMENT или скрипт запускается на виндовс сервере, кол-во записей одинаковы, но отличаются от тех которые выдавались на линуксе.

Так вы определитесь, где именно правильный запрос. Если все 87 удовлетворяют условию, то ошибка в запросе через студию - возвращает не все результаты. Соответственно, нужно параметры соединения в студии ковырять.
29 окт 14, 14:06    [16772699]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
max aka max
Member

Откуда:
Сообщений: 204
Arm79
А "лишние" 22 строчки анализировали? Они удовлетворяют вашему условию?

Спасибо, это меня толкнуло на то что на линуксе драйвер freetds автоматом добавляет в запрос:
set ansi_nulls off; set concat_null_yields_null off;
А в винде нет. Разница было в этом. но текст запроса не менялся. Спасибо всем!
29 окт 14, 14:08    [16772719]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение MSSQL при обращении через PHP  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3695
max aka max
Arm79
А "лишние" 22 строчки анализировали? Они удовлетворяют вашему условию?

Спасибо, это меня толкнуло на то что на линуксе драйвер freetds автоматом добавляет в запрос:
set ansi_nulls off; set concat_null_yields_null off;
А в винде нет. Разница было в этом. но текст запроса не менялся. Спасибо всем!


Так вам же это с самого начала сказали:

invm
max aka max,

Опции соединения сравнивайте. Особенно CONCAT_NULL_YIELDS_NULL.
29 окт 14, 14:15    [16772757]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить