Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Почему отображается сообщение об ошибке? / 6 сообщений из 6, страница 1 из 1
18.12.2014, 15:54
    #38837272
rnwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему отображается сообщение об ошибке?
Добрый день!
Есть такой код (не весь, фрагмент), надстройка на phpbb3:
Код: 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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
function read_replscript($script_name)
{
$handle = fopen($script_name, "r");
$sql =fread ($handle, filesize ($script_name));
fclose($handle);
return $sql;
}


function exec_script($db, $sql)
{
   try 
   { 
     $db->sql_query($sql);
   } 
   catch (Exception $e) 
   { 
      throw $e; 
   } 
}

....

	print("Connect Ok!<br>");

//Бежим по папкам


    	while ($row = $db->sql_fetchrow($result))
 	{
		$client_id=$row['client_id'];
		$client_path=$phpbb_root_path . "rpl/" . $client_id . "/";             

		$server_counter=$row['counter'];
		$client_counter=get_client_counter($client_path . "counter.txt");
	print('$client_counter' . $client_counter . '<br>'); 
		
		$server_counter++;
             
		for ($i=$server_counter; $i<=$client_counter;$i++)
		{
		
		print("выполнить скрипт " .$i. ".sql <br>");
        	      $script_name=$client_path ."in/". $i . ".sql";
		print($script_name . "<br>");

		       try 
			{ 
			$sl=read_replscript($script_name);
			exec_script($db, $sl);
		print ('exec script done! <br>');            
			} 

			catch (Exception $e) 
			{ 
		print("Erroren!" . $e->errorMessage() . "<br>"); 
			} 

		} //for




	print($row['client_name']. "<br>");
	print($client_path . "<br>");

	} //while

....



Вопрос в том, почему вываливается ошибка как на картинке и все стопорится, а не срабатывает try .. catch.
Идея в том, что если произошла sql ошибка залогировать ее в catch, что-нибудь еще сделать, но не таким образом вырубать выполнение.
...
Рейтинг: 0 / 0
18.12.2014, 17:48
    #38837439
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему отображается сообщение об ошибке?
rnwl,

ваши слова...залогировать, обработать итд..
а по вашему, какой код должен был сработать чтобы сделать вышеописанное?? конкретно сточку кода в вашем посте покажите, какая должна была логировать или чтото ещо.
...
Рейтинг: 0 / 0
18.12.2014, 17:51
    #38837448
rnwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему отображается сообщение об ошибке?
alex564657498765453, ожидалось увидеть надпись на экране

catch (Exception $e)
{
print("Erroren!" . $e->errorMessage() . "<br>");
}
...
Рейтинг: 0 / 0
19.12.2014, 08:45
    #38837746
anvano
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему отображается сообщение об ошибке?
Это всего лишь означает, что класс, который вы используете для работы с БД самостоятельно обрабатывает SQL исключения и не выпускает их наружу.

То есть в вашем случае нарушение уникальности PRIMARY ключа на таблице привело к данному сообщению и завершению работы скрипта.
До вашего кода даже не дошло.
...
Рейтинг: 0 / 0
19.12.2014, 09:52
    #38837806
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему отображается сообщение об ошибке?
mwl,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function exec_script($db, $sql)
{
   try 
   { 
     $db->sql_query($sql);
   } 
   catch (Exception $e) 
   { 
      throw $e; 
   } 
}


В точности делает то же самое, что и
Код: php
1.
2.
3.
4.
function exec_script($db, $sql)
{
     $db->sql_query($sql);
}



И самое главное... а что есть $db? Вполне вероятно, что он первым перехватил исключение, обработал его... и бросил die или exit напоследок например.
...
Рейтинг: 0 / 0
19.12.2014, 11:55
    #38837958
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему отображается сообщение об ошибке?
rnwlalex564657498765453, ожидалось увидеть надпись на экране

catch (Exception $e)
{
print("Erroren!" . $e->errorMessage() . "<br>");
}

мдя...я предполагал что мой вопрос заставит задуматься, но он таки заставил - только не автора а коментатора.

а задуматься вод над чем надо было.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 try 
			{ 
			$sl=read_replscript($script_name);
			exec_script($db, $sl);
		print ('exec script done! <br>');              //!!! -#1
			} 

			catch (Exception $e) 
			{ 
		print("Erroren!" . $e->errorMessage() . "<br>"); //!!! -#2
			} 
print($row['client_name']. "<br>");//!!! -#3
	print($client_path . "<br>");//!!! -#4



если возникнет исключение (выбороситься) то вместо строки 1 мы увидим строку 2
но в любом случае мы увидим 3 и 4, если вообще этот участок кода работает.
но как мы видим по выводу, 3 4 которые должны были быть в любом случае, не выполнилися, а перед ними команды эксит нету. а скрипт таки завершил свою работу...

ну это то что и написал коментатор - в другом месте идёт перехват исключения, и завершение работы.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Почему отображается сообщение об ошибке? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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