DB2+PHP+APACHE+Windows

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Pellegrino
Сообщения: 2
Зарегистрирован: 30 авг 2010, 15:15

Добрый день коллеги! Возникла проблема следующего рода, надо передать из PHP под Апачем запрос SQL с параметрами, запрос к хранимой процедуре в DB2. Подключение вроде проходит, но запарывает запрос всегда, в Дата центре или контроле нормально все выдает. Ниже пример как я вывожу:

Вывожу примерно так

Код: Выделить всё

$base="LOCD";
$dblogin = '***';
$dbpassword = '****';
$conn = new PDO('odbc:LOCD',$dblogin,$dbpassword); 
$sql = "call LSOM02.GET_OTPR_PAYER ('2010-06-25-00.00.00',  '2010-06-26-00.00.00', 100027162, 0, ?, ? );";
$stmt = $conn->exec($sql);
do {
   $rows =$stmt->fetch();
   if ($rows) {
       echo($rows);
   }
} while ($stmt->nextRowset());
 
вот может на вопросы ругается?
или пробовал так

Код: Выделить всё

base="LOCD";
$name="***";
$password="***";
$conn=odbc_connect($base,$name,$password) or die(odbc_errormsg()); 
$sql=odbc_exec($conn, "call LSOM02.GET_OTPR_PAYER ('2010-07-30-00.00.00',  '2010-07-31-00.00.00', 100027162, 0,?,?)") or die(odbc_errormsg());
$row=odbc_fetch_array($sql);
do 
{
echo $row['ID'];
}
while ($row=odbc_fetch_array($sql));
odbc_close($conn); 
 
в обоих случаях тыкает в запрос.
Если кто знает, можно с примером ответ. а то только начал с php работать
Pellegrino
Сообщения: 2
Зарегистрирован: 30 авг 2010, 15:15

Код хранимой процедуры

Код: Выделить всё

CREATE PROCEDURE LSOM02.GET_OTPR_PAYER (
      in pdt_begin timestamp, -- дата начала периода запроса
      in pdt_end timestamp,   -- дата окончания периода запроса
      in pkodpl integer,      -- код плательщика
      in pvis integer,        -- 0-отправление/1-раскредитование
      OUT P1 INTEGER,         -- 0 – нормальное выполнение, 
                              -- 1 – предупреждение, 
                              -- 2 – ошибка SQL
      OUT P2 INTEGER          -- код ошибки/предупреждения
  )
    RUN OPTIONS 'NOTEST(NONE,*,*,*)' EXTERNAL NAME ' SPKBSH01'
    LANGUAGE SQL
    COLLID LSOM02
    WLM ENVIRONMENT DB2DAPP1
    DYNAMIC RESULT SET 1
    NOT DETERMINISTIC
    READS SQL DATA
    STAY RESIDENT NO
    PROGRAM TYPE MAIN
    COMMIT ON RETURN NO

P1: BEGIN
  
   -- Объявить указатель
   DECLARE C1 CURSOR WITH RETURN FOR
    SELECT oobdan.id as id,           
           oobdan.kodpl as kodpl,     
           oobdan.dto,                
           oobdan.sto as sto,         
           oobdan.stn as stn,         
           oobdan.stnp as stnp,       
           oobdan.nomd as nomd,       
           char(ovag.nomvag) as nomvag,  
           oobdan.vesgr as vesgr,        
           oobdan.kodgrnsi as kodgrnsi,  
           sum(oplat.sumplat) as summa,   
           oobdan.kodgo as kodgo,        
           oobdan.okpogo as okpogo,      
           oobdan.kodgp as kodgp,        
           oobdan.okpogp as okpogp,      
           oobdan.iskl as iskl,          
           oobdan.rmonth,                
           coalesce(omegper.strn,643) as strn, 
           0 as prin_vk,                       
           ovag.gruzopod as gruzopod,      
           oobdan.doro as doro,            
           oobdan.dornp as dornp,          
           oobdan.dorn as dorn             
    FROM DOEK.ophconng ophconn
    JOIN DOEK.oobdan oobdan on (ophconn.id_om=oobdan.id)
    JOIN DOEK.ovag ovag on (ovag.id=oobdan.id)
    JOIN DOEK.oplat oplat on (oplat.id=oobdan.id)
    LEFT JOIN DOEK.omegper omegper on (omegper.id=oobdan.id)
    WHERE ophconn.dtsoob>=pdt_begin and ophconn.dtsoob<pdt_end
          and oobdan.kodpl=pkodpl and oobdan.vis=pvis 
          and oplat.prnachisl=1
    --не затрагивать последние 30 минут
          and ophconn.dtrec<=CURRENT_TIMESTAMP-30 MINUTES
group by 
oobdan.id, oobdan.kodpl, oobdan.dto, oobdan.sto, oobdan.stn,
oobdan.stnp, oobdan.nomd, oobdan.katotp, char(ovag.nomvag),
 oobdan.vesgr, 
oobdan.kodgrnsi, oobdan.kodgrgng,  oobdan.kodgo, oobdan.okpogo, 
oobdan.kodgp, oobdan.okpogp, oobdan.iskl, oobdan.rmonth, 
coalesce(omegper.strn,643), ovag.gruzopod, oobdan.doro, oobdan.dornp, 
oobdan.dorn 
    union all
    SELECT oobdan.id as id, 
           oobdan.kodpl as kodpl, 
           oobdan.dto, 
           oobdan.sto as sto, 
           oobdan.stn as stn, 
           oobdan.stnp as stnp, 
           oobdan.nomd as nomd, 
           oobdan.katotp as katotp, 
           okont.nomknt as nomvag, 
           oobdan.vesgr as vesgr, 
           oobdan.kodgrnsi as kodgrnsi, 
           oobdan.kodgrgng as kodgrgng, 
           sum(oplat.sumplat) as summa, 
           oobdan.kodgo as kodgo, 
           oobdan.okpogo as okpogo, 
           oobdan.kodgp as kodgp, 
           oobdan.okpogp as okpogp, 
           oobdan.iskl as iskl, 
           oobdan.rmonth, 
           coalesce(omegper.strn,643) as strn, 
           1 as prin_vk, 
           okont.gruzopod as gruzopod, 
           oobdan.doro as doro, 
           oobdan.dornp as dornp, 
           oobdan.dorn as dorn 
    FROM DOEK.ophconng ophconn
    JOIN DOEK.oobdan oobdan on (ophconn.id_om=oobdan.id)
    JOIN DOEK.okont okont on (okont.id=oobdan.id)
    JOIN DOEK.oplat oplat on (oplat.id=oobdan.id)
    LEFT JOIN DOEK.omegper omegper on (omegper.id=oobdan.id)
    WHERE ophconn.dtsoob>=pdt_begin and ophconn.dtsoob<pdt_end
          and oobdan.kodpl=pkodpl and oobdan.vis=pvis and oplat.prnachisl=1
          and ophconn.dtrec<=CURRENT_TIMESTAMP-30 MINUTES
group by 
oobdan.id, oobdan.kodpl, oobdan.dto, oobdan.sto, oobdan.stn,
 oobdan.stnp,
oobdan.nomd, oobdan.katotp, okont.nomknt, oobdan.vesgr, 
oobdan.kodgrnsi,
oobdan.kodgrgng,  oobdan.kodgo, oobdan.okpogo, oobdan.kodgp,
oobdan.okpogp, oobdan.iskl, oobdan.rmonth, 
coalesce(omegper.strn,643),
okont.gruzopod, oobdan.doro, oobdan.dornp, oobdan.dorn 
    FOR READ ONLY WITH UR;
  -- Декларация EXIT-боков
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
    SELECT 2, SQLCODE
      INTO P1, P2
      FROM SYSIBM.SYSDUMMY1;
  DECLARE EXIT HANDLER FOR SQLWARNING
    SELECT 1, SQLCODE
      INTO P1, P2
      FROM SYSIBM.SYSDUMMY1;
  ---------------------------------------------------------------
  -- Присвоить значение возвращаемым переменным
  SET P1 = 0;
  SET P2 = 0;
    -- Указатель оставлен открытым для программы клиента
  OPEN C1;
END P1
Ответить