powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Подключение к БД firebird в цикле
14 сообщений из 14, страница 1 из 1
Подключение к БД firebird в цикле
    #38938708
DjDozhdik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Прошу помочь разобраться в простой конструкции.
Задача: необходимо выбрать информацию в цикле из 10 БД. Если есть доступ до всех 10 БД, то код работает как полагается, но если к примеру 8 сервер недоступен, то вывода информации с 9 и 10 БД не осуществляется (вывод на данных на страницу будет только с 7-ми БД).
Как пропустить неудачное подключение к БД?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
   $fb_host=$ip.':base';        
   $fb_username='SYSDBA';
   $fb_password='куку-руку';
   $fb_connect=ibase_connect($fb_host,$fb_username,$fb_password,"WIN1251") or die(ibase_error());
   echo '<table>';
   echo '<tr>';
   echo '<th>'.$aliases.'</th>';
   echo '</tr>';
   $fb_query="select first 5 * from USERS";
   $result=ibase_query($fb_connect,$fb_query);
   if ($result!=0)
       {
	 while($data = ibase_fetch_assoc($result))		
            {
  	       echo '<tr>';
	       echo '<td>' . $data['SUSER_FIO'] . '</td>';
	       echo '</tr>';				
            }
       }
   else    
      {		   
	echo '<tr>';
	echo '<td>"no connect"</td>';
	echo '</tr>';
      }
   echo '</table>';
   ibase_free_result($result);
   ibase_close($fb_connect);
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38938718
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятно, следует использовать continue для перехода на следующий проход цикла вместо die.
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38939129
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DjDozhdik,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
$fb_connect=ibase_connect(...);
if ($fb_connect != 0) 
   {
        // есть соединение
    }
else {
         // нет соединения
      }
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38939728
DjDozhdik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
советы помогли, но нюанс присутствует.
or die(ibase_error() убрал и цикл сейчас не прерывается.

подскажите как прописать условие, если данных удовлетворяющих условию поиска в sql запросе нет - if ($result=0)?

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
$fb_host=$ip.':ncore-fssp';        
$fb_username='SYSDBA';
$fb_password='куку-руку';
$fb_connect=ibase_connect($fb_host,$fb_username,$fb_password,"WIN1251");
if ($fb_connect!=0)//если есть подключение к БД
   {
     $fb_query="select SUSER_FIO from SYS_USERS where SUSER_FIO='киркоров'";
     $result=ibase_query($fb_connect,$fb_query);		   
     if ($result=0)
       {			
	 echo "возвращаемых данных нет";
       }
    else
      { 
        while($data = ibase_fetch_assoc($result))		
           {
	     echo '<td>' . $data['SUSER_FIO'] . '</td>';
           }
      }			   
else
   {
     echo '<td>no connect</td>';
   }    
   }
ibase_free_result($result);
ibase_close($fb_connect);
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38939763
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DjDozhdik,

Правильно проверяй результат, а не занимайся присваиванием. Т.е. Запрос может выполниться правильно, но ничего не вернуть - это нормально.
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38939793
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тело цикла while выполнилось хотя бы один раз - значит данные есть.
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38939940
DjDozhdik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так как правильно проверить, если ли что возвращать sql запросу?
Так пробую:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if (($row = ibase_fetch_row($result)) === FALSE)
      {			
	 echo "возвращаемых данных нет";
       }
    else
      { 
        while($data = ibase_fetch_assoc($result))		
           {
	     echo '<td>' . $data['SUSER_FIO'] . '</td>';
           }
      }		



Если результатом sql запроса является 3 строки, то php выводит 2 строки.
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38939949
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DjDozhdik,

Код: php
1.
2.
3.
4.
5.
6.
7.
if ( $result ) {
    while( $data = ibase_fetch_assoc( $result ) ) {
        // any sheet   
    }
} else {
    die( "Нэт ризалт" );
}



Так, не?
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38940173
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DjDozhdik,

А ты при проверке 1 раз отфетчил строку без вывода. А потом 2 остальные вывел.
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38940236
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DjDozhdik,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
 $flag=false;
 while ( ($row=ibase_fetch_object($result)) !==FALSE) 
     {
         // выводим данные
         echo .........;
         $flag=true;     // скажем себе, что что-то вывели
     }

 if ($flag .... )      // дальше рассказывать?
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38942032
DjDozhdik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, рекомендации помогли.
При долгом выполнении sql запроса необходимо в php.ini отрегулироваь параметр max_execution_time = 240
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
while(! feof($fd))   
       {
        $line= fgets($fd,21);
     	$aliases=substr($line,0,strrpos($line,' '));
	$ip=substr($line,strrpos($line,' ')+1,strlen($line));
 	$fb_host=$ip.':alias';        
	$fb_username='SYSDBA';
        $fb_connect=ibase_connect($fb_host,$fb_username,$fb_password,"WIN1251");
        if ($fb_connect!=0)
           {
            $fb_query="sql запрос";
		    $result=ibase_query($fb_connect,$fb_query);		   
		    echo '<table width=900>';
	            echo '<tr>';
		    echo '<th colspan=2>'.$aliases.'</th>';
		    echo '</tr>';
	            echo '<tr>';
		    echo '<td>IP адрес</td>';
		    echo '<td>Номер сессии</td>';
		    echo '</tr>';
		    $flag=false;
		    while (($data=ibase_fetch_assoc($result))!==false)
                      {                 
			$flag=true;
			echo '<tr>';
			echo '<td>' . $data['IP адрес'] . '</td>';
			echo '<td>' . $data['Номер сессии'] . '</td>';
			echo '</tr>';				 
                      }
            if ($flag==false)
	      {			
	       echo '<tr>';
	       echo '<td colspan=2 align=center>данные отсутствуют!</td>';
	       echo '</tr>';
	      }						   
           echo '</table>';
           ibase_free_result($result);
	   ibase_close($fb_connect);
              }
        else
           {
	    echo '<table width=900>';
	    echo '<tr>';
	    echo '<th colspan=2>'.$aliases.'</th>';
	    echo '</tr>';
	    echo '<tr>';
	    echo '<td colspan=2 align=center>отсутствует подключение к базе данных</td>';
	    echo '</tr>';
            echo '</table>';		    
           }		
	   }
fclose ($fd);
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38950778
DjDozhdik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уперся в непонятную ситуацию.
Вышеуказанный код отточил на windows машине на сервере wamp.
Затем решил перетащить на linux centos 6.6.
Два компьютера на windows и linux находятся в одной сети, подключены в один коммутатор.
Со всеми удаленными серверами устанавливается соединение (есть ping ) и подключаюсь по алиасу ssh 19, ssh 34.
вот часть списка ip адресов к 3 серверу не подключается:
10.50.5.12
10.50.5.25
10.50.51.130
При выполнении кода к серверам, которые находятся внутри одного коммутатора проблем нет, а вот к территориально удаленным серверам, но которые находятся в локальной сети (vpn от Ростелекома) при подключении к базе данных вываливается ошибка.
Код: html
1.
2.
3.
4.
5.
6.
7.
error_log          [----] 183 L:[  1+ 5   6/  7] *(606 / 689b) 0032 0x020
[Sat May 02 15:14:34 2015] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sat May 02 15:14:34 2015] [notice] Digest: generating secret for digest authentication ...
[Sat May 02 15:14:34 2015] [notice] Digest: done
[Sat May 02 15:14:34 2015] [warn] ./mod_dnssd.c: No services found to register
[Sat May 02 15:14:34 2015] [notice] Apache/2.2.29 (Unix) DAV/2 PHP/5.3.3 configured -- resuming normal operations
[Sat May 02 15:17:04 2015] [error] [client 10.50.20.131] PHP Warning:  ibase_connect(): Unable to complete network request to host "10.50.51.130\n". Failed to establish a connection. 


Я как понимаю дело в настройках php?
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38950789
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DjDozhdik, сперва убедитесь, что проблема не в доступности удалённого хоста, не в файрволлах (да может порт закрыт где-то), и не в настройках удалённого сервера (ожидает ли он внешнее подключение).
...
Рейтинг: 0 / 0
Подключение к БД firebird в цикле
    #38950794
DjDozhdik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так этот же код работает с windows машины, проблема не в удаленных серверах.
на всех серверах selinux=disabled, chkconfig iptables off
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Подключение к БД firebird в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]