запрос выполняется на mssql server 2005, но не выполняется из php 5

cyklop77

Новичок
запрос выполняется на mssql server 2005, но не выполняется из php 5

подскажите пожалуйста почему следующий вопрос выполняется на mssql-сервере(2005), но не выполняется из php?
PHP:
select sub.dt, (select dbo.Concatenate(data + '/') from dbo.TreeObject(sub.id_object)) obj, 
SUM(CASE WHEN sub.cntstage=1 then 1 else 0 end) firstline, 
from ( select DATEPART(mm, r.start_time) dt, r.id_object, 
(select count(*) from st s where s.id_request = r.id_request) 
cntstage, r.id_request, r.stop_time, isnull(r.finish_time, GETDATE()) finish_time, r.id_sct from re r, cu rc
сам запрос я урезал, так как на самом деле он значительно больше. думаю, для ответа на мои вопрос таких подробностеи не требуется, так как ошибка скорее всего элементарная... если этот запрос выполняю на mssql server 2005, то получаю табличку. если запрос выполняю из пхп, то результирующий набор получаю(так как сообщений об ошибке нет). НО пытая применить функцию mssql_fetch_assoc, получаю ошибку. вот пхп-код:
PHP:
$r=mssql_query($q) or die( 'ERROR' ); 
if(!$r) 
{ 
echo("error mssql query"); exit; 
} 
echo("<pre><p align='left'>".$q."</p></pre>"); 
echo("<hr />"); 
$res = mssql_fetch_assoc($r) or die(eerroorr);
echo($res['firstline']."<br />");
 

Basili4

Новичок
замечание по коду
не надо так делать
$r=mssql_query($q) or die( 'ERROR' );
if(!$r)
{
echo("error mssql query"); exit;
}

лучше так

$r=mssql_query($q) or die( 'error mssql query ' );

в первом случае строку error mssql query все ровно не увидите

по теме попробуйте что вернет
mysql_fetch_row
 

cyklop77

Новичок
заменил в коде строку на такую:
$res = mssql_fetch_assoc($r) or die("eerroorr".mssql_get_last_message());
в результате программа на этой строке останавливается(на экран выводится слово eerroorr , но никакого сообщения об ошибке нет)
 

prolis

Новичок
Автор оригинала: cyklop77
заменил в коде строку на такую:
$res = mssql_fetch_assoc($r) or die("eerroorr".mssql_get_last_message());
)
1.Ошибка раньше должна одниматься:
PHP:
$r=mssql_query($q);
if(!$r)  
{  
echo("error mssql query".mssql_get_last_message()); exit;  
}
2. Простые запросы работают?
[sql]
select count(*) from st
[/sql]
 

cyklop77

Новичок
ставил и на этоу mysql-функцию и на все остальные какие были. результат тот же - сообщения об ошибке нет.

простые запросы наподобие этого работают.
 

prolis

Новичок
Re: запрос выполняется на mssql server 2005, но не выполняется из php 5

Автор оригинала: cyklop77
если запрос выполняю из пхп, то результирующий набор получаю(так как сообщений об ошибке нет). НО пытая применить функцию mssql_fetch_assoc, получаю ошибку. вот пхп-код:
осталось только узнать, что же это за ошибка (первая преложенная ссылка).
 

cyklop77

Новичок
среди полей, которые я получаю этим запросом, есть агрегированные (SUM). может причина в том, что их в принципе нельзя вытащить при помощи функции mysql_fetch_assoc?..
 

prolis

Новичок
Приведи список результирующих полей запроса, может там что интересное.
Но самое главное - ты так и не привел текст ошибки, поэтому совсем не интересно гадать.
 

MiRacLe

просто Чудо
[telepat_mode]
В Query Analyzer (Management Studio) включи вывод ВСЕХ ошибок, все настройки вида ansi_**** в ON и повторно выполни запрос и устрани warning, который точно появится.

[/telepat_mode]
 

cyklop77

Новичок
спасибо всем за ответы. причину нашёл. все таки зря я здесь не разместил запрос полностью. чуть дальше было условие where с датой. когда в Management Studio дата была в формате dd.mm.yyyy , то запрос отрабатывал. из пхп- mssql сервер почему то не принимает её в таком формате, нужно переводить в другой - yyyy-mm-dd . что примечательно сообщения об ошибке деиствительно не было. mssql неправильный формат хавал, просто там число дикое получалось(но допустимое)
 

Активист

Активист
Команда форума
cyklop77
Потому как твоя GUI софтина для отладки запроса выводит/трансформирует даты в соотвествии с системной локалью.
 

cyklop77

Новичок
... появилась похожая проблема, решил не создавать новую тему, а продолжить эту.
написал на пхп простеиший скрипт. он подключается к oracle9, делает выборку и выводит значение определенного поля. выборка производится на основе даты.
PHP:
	$realtime=time();
	$realtime_minus=time()-60;
	$rt=date('d.m.Y h:i', $realtime);
	$rt_minus=date('d.m.Y h:i', $realtime_minus);
	echo($rt."\n");
	echo($rt_minus."\n");


	if ($c=OCILogon("", "", "", "CL8MSWIN1251"))
	{
		echo "Successfully connected to Oracle.<br>";
	}
	else
	{
		$err = OCI_Error();
		echo "Oracle Connect Error " . $err[message];
		exit;
	}

      $query="select round(sum(t.waittime)/count(*)) as q from waitexeclog t where to_char(t.timeevent,'DD.MM.YYYY HH24:MI:SS') like '".(date('d.m.Y h:i', $realtime_minus))."%'";

	echo($query."\n");
	$q = OCIParse($c, $query);
	OCIExecute($q);
	$res = oci_fetch_row($q);
	echo("middle: ".$res[0]."\n");
проблема в том, что на экран ничего не выводится, хотя значение в указанном столбце есть(этот запрос делаю через девелопер и все нормально - результат есть).
примечательно то, что если использую в скрипте запрос такой:
PHP:
$query="select round(sum(t.waittime)/count(*)) as q from waitexeclog t where t.timeevent like to_char('15.07.2010 15:03%')";
то результат есть и выводится на экран как и задумано. только это меня, как сами понимаете, не устраивает, так как дата должна меняться каждую минуту.

даже не могу предположить где искать решение. пробовал различные пхп-функции приведения типов, обрезал пробелы по краям и т д. не помогает. подскажите пожалуйста как заставить скрипт работать?

ps
CL8MSWIN1251 - кодировка базы оракл. делал специальный запрос в девелопере. тоже пробовал ее в скрипте не указывать вообще.
 
Сверху