Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Выполнение кода лишний раз / 19 сообщений из 19, страница 1 из 1
03.11.2014, 04:41
    #38794474
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Есть код:
Код: 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.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
<?php
session_start();

$slovo_original = $_SESSION["slovo_original"];
$slovo_k = $_POST["slovo"];
$perevod = $_POST["perevod"];
$znachenie = $_POST["znachenie"];

for ($i = 0; $i < count($perevod); $i++)
{
	$perevod[$i] = trim($perevod[$i]);
	$perevod[$i] = preg_replace("/ {2,}/", " ", $perevod[$i]);
	$perevod[$i] = preg_replace("/'/", "\'", $perevod[$i]);
	}

for ($i = 0; $i < count($znachenie); $i++)
{
	$znachenie[$i] = trim($znachenie[$i]);
	$znachenie[$i] = preg_replace("/ {2,}/", " ", $znachenie[$i]);
	$znachenie[$i] = preg_replace("/'/", "\'", $znachenie[$i]);
	}

include ('podkluchenie.php');

if($slovo_original != $slovo_k)
{
	$proverka_nalichiya_slova = mysql_query("  
	SELECT `s` FROM `k-ts` WHERE `s` = '".$slovo_k."'
	");
	
	$n = 0;
	while ($data = mysql_fetch_array($proverka_nalichiya_slova))
	{
		$proverka_nalichiya[$n] = $data['s'];
		$n++;
		}
		
	if(!isset($proverka_nalichiya))
	{
		mysql_query("
		UPDATE `k-ts`
		SET `s` = '".$slovo_k."'
		WHERE `s` = '".$slovo_original."' 
		");
		}
		else if(isset($proverka_nalichiya))
		{
			/////////////////////////////////////////////////////////////////////
			
			$ids_original = mysql_query("
			SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_original."'
			");
			
			$n = 0;
			while ($data = mysql_fetch_array($ids_original))
			{
				$ids_orig[$n] = $data['ids'];
				$n++;
				}
			
			$ids_original = $ids_orig[0];
			
			//////////////////////////////////////////////////////////////////////
			
			$ids_ispravlennogo = mysql_query("
			SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'
			");
			
			$n = 0;
			while ($data = mysql_fetch_array($ids_ispravlennogo))
			{
				$ids_ispr[$n] = $data['ids'];
				$n++;
				}
			
			$ids_ispravlennogo = $ids_ispr[0];
			
			//////////////////////////////////////////////////////////////////////
			
			mysql_query("
			UPDATE `k-t_s`
			SET `id_s` = '".$ids_ispravlennogo."'
			WHERE `id_s` = '".$ids_original."' 
			");
			
			mysql_query("
			UPDATE `k_l`
			SET `idk` = '".$ids_ispravlennogo."'
			WHERE `idk` = '".$ids_original."' 
			");
			
			mysql_query("
			DELETE FROM `k-ts` WHERE `s` = '".$slovo_original."'
			");
			}
	}

$a = count($perevod);//print_r($a);

for($i = 0; $i < $a; $i++)
{
	mysql_query("  
	INSERT IGNORE INTO `l-ts` (`s`)
	VALUES ('".$perevod[$i]."')
	");
	mysql_query(" 
	INSERT IGNORE INTO `tz` (`z`)
	VALUES ('".$znachenie[$i]."')
	");
	mysql_query("  
	INSERT INTO `k_l` (`idk`, `idl`, `idz`)
	VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'),  
			(SELECT `ids` FROM `l-ts` WHERE `s` = '".$perevod[$i]."'),
			(SELECT `idz` FROM `tz` WHERE `z` = '".$znachenie[$i]."'))  
	");
	}
	
mysql_query("
UPDATE `k-ts`
SET `f` = 1
WHERE `s` = '".$slovo_k."' 
");
	
mysql_close($podkluchenie);

header("Location: http://***.php");

?>


При непонятных условиях вот этот кусок (а может и не только то, что я указал, а больший кусок):
Код: php
1.
2.
3.
4.
5.
6.
mysql_query("  
	INSERT INTO `k_l` (`idk`, `idl`, `idz`)
	VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'),  
			(SELECT `ids` FROM `l-ts` WHERE `s` = '".$perevod[$i]."'),
			(SELECT `idz` FROM `tz` WHERE `z` = '".$znachenie[$i]."'))  
	");


заносит в бд перевод и значение два раза подряд. Более трёх раз не встречалось. Так происходит иногда, даже не понять тенденцию и условия. Причём, когда я повторяю замеченый случай с теми же данными, то всё нормально — не могу отследить причину. Может вообще не там ищу…
...
Рейтинг: 0 / 0
03.11.2014, 15:14
    #38794650
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
выведите на экран исходный запрос, посмотрите что возвращают вложенные запросы. var_dump ваше все.
...
Рейтинг: 0 / 0
03.11.2014, 22:02
    #38794869
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Сделал после скрипта сразу вывод результата: буду так ловить повторения.
...
Рейтинг: 0 / 0
04.11.2014, 01:21
    #38794944
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Повторения происходят периодически, можно сказать даже часто, проверка их выводит: раз через десять. ХЗ…
...
Рейтинг: 0 / 0
06.11.2014, 03:56
    #38796862
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
При помощи переменной проверил число повторений цикла вставки данных в базу: МИСТИКА))) Число повторений нормальное даже когда вставки дублируются. Что кроме цикла может заставить вставлять в бд записи ещё один раз?
...
Рейтинг: 0 / 0
06.11.2014, 03:58
    #38796864
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
andrejkПри помощи переменной проверил число повторений цикла вставки данных в базу: МИСТИКА))) Число повторений нормальное даже когда вставки дублируются. Что кроме цикла может заставить вставлять в бд записи ещё один раз?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
$b = 0;
	for($i = 0; $i < count($perevod); $i++)
	{
		mysql_query("  
		INSERT IGNORE INTO `l-ts` (`s`)
		VALUES ('".$perevod[$i]."')
		");
		mysql_query(" 
		INSERT IGNORE INTO `tz` (`z`)
		VALUES ('".$znachenie[$i]."')
		");
		mysql_query("  
		INSERT INTO `k_l` (`idk`, `idl`, `idz`)
		VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'),  
				(SELECT `ids` FROM `l-ts` WHERE `s` = '".$perevod[$i]."'),
				(SELECT `idz` FROM `tz` WHERE `z` = '".$znachenie[$i]."'))  
		");
		$b++;
		}
	
	/////////////////////////
	$_SESSION["aaa"] = $b;
	/////////////////////////
...
Рейтинг: 0 / 0
06.11.2014, 04:02
    #38796865
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Причём второй раз записи вставляются не по очереди (1,1,2,2,3,3,4,4), а партией (1,2,3,4,1,2,3,4). Напомню, это происходит редко. По последним наблюдениям неск раз на пару сотен обращений к циклу. Таблица в utf8 bin. Может дедло не в php?
...
Рейтинг: 0 / 0
06.11.2014, 04:13
    #38796866
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Только что предаоложил: может дело в этой строке
Код: php
1.
SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'

,
может она выбирает более одного значения?
Гуру БД, как поведёт запрос, если эта строка выберет более одного значения? Хотя, этот столбец ункальный… ХЗ…
...
Рейтинг: 0 / 0
06.11.2014, 06:25
    #38796897
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Может, сделать логгирование запросов?
...
Рейтинг: 0 / 0
06.11.2014, 06:54
    #38796902
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
vkleМожет, сделать логгирование запросов?
Я ещё ни разу не делал логирование. как это сделать?
...
Рейтинг: 0 / 0
06.11.2014, 07:11
    #38796906
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Заменяете в коде mysql_query на название своей функции (или метода класса) работы с БД. А там уже легко добавить строчки для записи в файл текста запроса, ошибки выполнения, количества возвращаемых строк и т.д. и т.п.
...
Рейтинг: 0 / 0
06.11.2014, 11:50
    #38797109
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
andrejk,

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

1)а что будет если вернёт больше одной записи, хотя столбец вроде уникальный...
зашли в базу - как вы там к ней подключаетесь и выполнили запрос
вместо (селект поле из таблица где иникальное_поле=10)
на (...... уникальное_поле=10 или уникальное_поле=11) и посмотрели что будет - говорю, голова золотая, а вот руки ....

2)я не делал логирования...и прочая теоретическая ерунда...
на каждой команде mysql_query(ааа) добавили команду дозаписи ааа строки в файл.

потом по файлу посмотрите что было...

или

$mylog = '';

везде где запрос в базу, сразу дозапись запроса в переменую малог

везде где ветвление(улосвие) или цикл, дозапись в майлог, о том что выполнилась такаято итерация цикла, или сработало такоето условие.

в конце файла,
лишний запрос в базу, чтобы увидеть - номально прошло, или дважды вставило запись.
если дважды - майлог, сохранить в файл.

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

ЗЫ
всегда первый шаг поиска бага теоретический, но если пару часов и результата нету, надо от теории переходить к практике.
...
Рейтинг: 0 / 0
06.11.2014, 17:15
    #38797545
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Код: sql
1.
2.
3.
4.
INSERT INTO `k_l` (`idk`, `idl`, `idz`)
		VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` in ('море','фон')),  
				(SELECT `ids` FROM `l-ts` WHERE `s` = '3d'),
				(SELECT `idz` FROM `tz` WHERE `z` = '3Д-графика (трёхмерная графика)'))  


Этот запрос, как и следовало, не выполняется и ничего не записывает, видно, дело не в нём… Да, интересно девки пляшут. Колупаю дальше…
...
Рейтинг: 0 / 0
06.11.2014, 17:18
    #38797551
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
alex564657498765453на каждой команде mysql_query(ааа) добавили команду дозаписи ааа строки в файл.

Я впервые сталкиваюсь с отслеживанием, чирканите, пож, что за комманда и как её добавить.
...
Рейтинг: 0 / 0
06.11.2014, 20:13
    #38797746
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
...
Рейтинг: 0 / 0
06.11.2014, 20:17
    #38797752
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
file_put_content('filename.ext',$string, FILE_APPEND)
...
Рейтинг: 0 / 0
07.11.2014, 04:37
    #38798053
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Код: php
1.
2.
3.
4.
5.
6.
7.
$kontrol = mysql_query("  
		INSERT INTO `k_l` (`idk`, `idl`, `idz`)
		VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'),  
				(SELECT `ids` FROM `l-ts` WHERE `s` = '".$perevod[$i]."'),
				(SELECT `idz` FROM `tz` WHERE `z` = '".$znachenie[$i]."'))  
		");
file_put_contents('kontrol.txt',$kontrol, FILE_APPEND);


Вот это возвращает 1.
Что вы имеете ввиду под дозаписью запроса в файл?
...
Рейтинг: 0 / 0
07.11.2014, 10:28
    #38798214
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
mysql_query("select ...$k...");

-->

$string_query = "select ....$k...";

mysql_query($string_query);
file_put_content('file','query='.$string_query,FILE_APPEND)
...
Рейтинг: 0 / 0
07.11.2014, 16:00
    #38798668
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение кода лишний раз
Так, я понял, запрос зделать через переменную. А что такое $k у вас?
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Выполнение кода лишний раз / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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