Проблема в связке InterBase + PHP

Pegas

Новичок
Проблема в связке InterBase + PHP

FireBird 1.5 + php 5.2.0.


Вариант 1.

скрипт parsing.php
PHP:
// Подключаем файл конфигурации
if (is_file($_SERVER['DOCUMENT_ROOT'].'/system/config.php'))
  include_once($_SERVER['DOCUMENT_ROOT'].'/system/config.php');

// Подключаем файл функций
if (is_file($_SERVER['DOCUMENT_ROOT'].'/system/function.php'))
  include_once ($_SERVER['DOCUMENT_ROOT'].'/system/function.php');
  
// Подключаем файл Zip Module
if (is_file($_SERVER['DOCUMENT_ROOT'].'/pclzip.lib.php'))
  include_once($_SERVER['DOCUMENT_ROOT'].'/pclzip.lib.php');

// Подключение к БД
$link = ibase_connect($cfg['hostname'].$cfg['dbname'], $cfg['username'], $cfg['password']) or die ("Could not connect");


/*
закомментированный код
*/

  ibase_close($link);
    
  // Подключается файл автоматической отправки заказа по электронной почте
  if (is_file($_SERVER['DOCUMENT_ROOT'].'/system/mail.php'))
    include_once ($_SERVER['DOCUMENT_ROOT'].'/system/mail.php');
скрипт mail.php
PHP:
// Подключение к БД
$link = ibase_connect($cfg['hostname'].$cfg['dbname'], $cfg['username'], $cfg['password']) or die ("Could not connect");

...

$tran = ibase_trans(IBASE_WAIT, IBASE_COMMITTED, IBASE_WRITE, $link);
foreach ($arr1 as $k1 => $v1)
  {

  ...

  if (send_mail($emailaddress, $fromaddress, $emailsubject, $body, $attachments, $attachment_mem) == false)
    echo "Send mail false.<br>";
  else
    {
    //echo "Send mail completed.<br>";
    $query = "
    UPDATE
      ORDERS
    SET
      ORDERSTATUS = 3
    WHERE
      ORDERSLISTSUPP_CODE = ".$v1[3]." and
      CUSTOMER_CODE = ".$v1[4]." and
      CREATEDATE = '".$v1[7]."' and
      BDNUMBER = ".$v1[8].";";
    if (($result = ibase_query($tran, $query)) == false)
      {
      echo "Query falled. ".ibase_errmsg()."<br>";
      ibase_rollback($tran);
      break;
      }
    $query = "
    UPDATE
      ORDERSLISTSUPP
    SET
      SENDED_TO_SUPPLIER = 1
    WHERE
      ID = ".$v1[3]." and
      CUSTOMER_CODE = ".$v1[4]." and
      CREATEDATE = '".$v1[7]."' and
      BDNUMBER = ".$v1[8].";";
    if (($result = ibase_query($tran, $query)) == false)
      {
      echo "Query falled. ".ibase_errmsg()."<br>";
      ibase_rollback($tran);
      break;
      }
    }
  }
if (ibase_commit($tran) == false)
  {
  echo "Query falled. ".ibase_errmsg()."<br>";
  ibase_rollback($tran);
  break;
  }
ibase_close($link);
Запускаю скрипт parsing.php с браузера - все проходит на УРА, поля обновляются:
ORDERSTATUS = 3
SENDED_TO_SUPPLIER = 1
Выполняю запросы UPDATE со всеми параметрами отдельно в оболочке IB Expert:
ORDERSTATUS = 3
SENDED_TO_SUPPLIER = 1
Запускается скрипт parsing.php из своей программы на дельфи, в результате:
ORDERSTATUS = 1
SENDED_TO_SUPPLIER = 1


С какого так обновляется поле?


Вариант 2.

скрипт parsing.php - комменты сняты, там заполняется БД данными, в том числе поле ORDERSTATUS = 2.
скрипт mail.php - без изменений.
Запускаю скрипт parsing.php с браузера - все проходит на УРА, поля обновляются:
ORDERSTATUS = 3
SENDED_TO_SUPPLIER = 1
Выполняю запросы UPDATE со всеми параметрами отдельно в оболочке IB Expert:
ORDERSTATUS = 3
SENDED_TO_SUPPLIER = 1
Запускается скрипт parsing.php из своей программы на дельфи, в результате:
ORDERSTATUS = 2
SENDED_TO_SUPPLIER = NULL
Т.е. обновление полей вообще не прошло.
Сообщений об ошибках ни в каком из случаев НЕТ.

Люди, хелп! Хотя бы подскажите, где копать? Второй день мучаюсь, танцы с бубном уже танцевал - не помогает. Библиотека с InterBase кривой по идее быть не должна, в других скриптах UPDATE проходит без проблем.

-~{}~ 14.02.07 17:07:

Есть предположение, что кривая библиотека в дельфях.

-~{}~ 15.02.07 16:42:

Обнаружил, что в библиотеке задается множество параметров работы протокола HTTP. Т.к. основное отличие состоит в том, что с браузера работает все ок, то полюбому надо копать настройки этой библиотеки. А это уже не на этом форуме выяснять....

-~{}~ 15.02.07 18:18:

Комедия продолжается...Проверил все настройки библиотеки, все ОК. Создал простенькую табличку в БД с 1м полем. Заменил запросы на такие:
PHP:
$query = "UPDATE AAA SET ID = 220 WHERE ID = 22;";
$query = "UPDATE AAA SET ID = 110 WHERE ID = 11;";
Проще как говорится некуда. ВСЕ РАБОТАЕТ!

Народ, помогите идеями в решении проблемы.
 

bakh

Абалдуй
а. Мне кажется или ты действительно на два UPDATE'а делаешь только ОДИН коммит?..
б. FIBPlus - самая прямая библиотека для Дельфей... ;)
в. При чём тут вообще HTTP?.. :\
г. Попробуй вообще без транзакций в PHP... Лично я не пробовал их там и пробовать не буду... ;)
 

Pegas

Новичок
Автор оригинала: bakh
а. Мне кажется или ты действительно на два UPDATE'а делаешь только ОДИН коммит?..
да, так нужно.
б. FIBPlus - самая прямая библиотека для Дельфей... ;)
инди юзаем
в. При чём тут вообще HTTP?.. :\
когда закончились идеи вероятные, перебирал самые невероятные
г. Попробуй вообще без транзакций в PHP... Лично я не пробовал их там и пробовать не буду... ;)
нельзя без них
 

bakh

Абалдуй
А ты попробуй после каждого update'а...
Инди - для тырнета, а FIBPlus - для IB/FB... ;)
когда закончились идеи вероятные, перебирал самые невероятные
Прибить!.. :)))
нельзя без них
А попробовать?.. Рука не поднимается?..
...
Да и вообще... Какой IB?.. Какой PHP?.. Там какие-то траблы были раньше с совместной работой...
 

Pegas

Новичок
Инди - для тырнета, а FIBPlus - для IB/FB...
именно так и юзаем.
после каждого апдейта коммит не помогает.
вполне возможно, что проблемы были. собираюсь на MS перейти, но пока нужен именно IB, т.к. в нем все базы.
 

Pegas

Новичок
ошибка нашлась в коде дельфи. все дело в кривизне рук. тему можно закрыть.
 
Сверху