Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Подключение к БД firebird в цикле / 14 сообщений из 14, страница 1 из 1
16.04.2015, 23:59
    #38938708
DjDozhdik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
Здравствуйте!
Прошу помочь разобраться в простой конструкции.
Задача: необходимо выбрать информацию в цикле из 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
17.04.2015, 01:15
    #38938718
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
Вероятно, следует использовать continue для перехода на следующий проход цикла вместо die.
...
Рейтинг: 0 / 0
17.04.2015, 13:05
    #38939129
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
DjDozhdik,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
$fb_connect=ibase_connect(...);
if ($fb_connect != 0) 
   {
        // есть соединение
    }
else {
         // нет соединения
      }
...
Рейтинг: 0 / 0
18.04.2015, 01:05
    #38939728
DjDozhdik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
советы помогли, но нюанс присутствует.
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
18.04.2015, 09:04
    #38939763
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
DjDozhdik,

Правильно проверяй результат, а не занимайся присваиванием. Т.е. Запрос может выполниться правильно, но ничего не вернуть - это нормально.
...
Рейтинг: 0 / 0
18.04.2015, 12:29
    #38939793
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
Если тело цикла while выполнилось хотя бы один раз - значит данные есть.
...
Рейтинг: 0 / 0
19.04.2015, 00:16
    #38939940
DjDozhdik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
Так как правильно проверить, если ли что возвращать 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
19.04.2015, 01:15
    #38939949
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
DjDozhdik,

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



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

А ты при проверке 1 раз отфетчил строку без вывода. А потом 2 остальные вывел.
...
Рейтинг: 0 / 0
20.04.2015, 00:50
    #38940236
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
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
21.04.2015, 21:44
    #38942032
DjDozhdik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
Спасибо, рекомендации помогли.
При долгом выполнении 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
03.05.2015, 15:30
    #38950778
DjDozhdik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
Уперся в непонятную ситуацию.
Вышеуказанный код отточил на 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
03.05.2015, 16:54
    #38950789
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
DjDozhdik, сперва убедитесь, что проблема не в доступности удалённого хоста, не в файрволлах (да может порт закрыт где-то), и не в настройках удалённого сервера (ожидает ли он внешнее подключение).
...
Рейтинг: 0 / 0
03.05.2015, 17:11
    #38950794
DjDozhdik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД firebird в цикле
Так этот же код работает с windows машины, проблема не в удаленных серверах.
на всех серверах selinux=disabled, chkconfig iptables off
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Подключение к БД firebird в цикле / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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