Глючит проверка на существование записи в таблице

Keith Hendrix

Новичок
Во общем написал код для проверки, вот проблемный кусок кода:
PHP:
if(!mysql_fetch_row(mysql_query("SELECT 1 FROM `DataBase` WHERE `Address`='{$randomKeys[2]}' LIMIT 1"))){ //Если false(значит свободно), тогда..
	$u++;
	$tu++;
	if($u>=$totu){
		continue 2; //Вылет из этого цикла и новая итерация в верхнем
        }
	continue; // Новая итерация текущего цикла
}else{ //иначе, свободно - вылетаем текущего из цикла
	break;
}

	/*Когда проверка прошла успешно(т.е свободно) идёт запись в БД*/
mysql_query("INSERT INTO `DataBase`(`collum1`, `collum2`, `Address`, `collum3`, `collum4`, `collum5`, `collum6`) VALUES('{$randomKeys[4]}','{$randomKeys[5]}','{$randomKeys[2]}','{$randomKeys[0]}','{$randomKeys[3]}','{$randomKeys[1]}','{$randomKeys[6]}')") or die ('Error in db INSERT: ' .mysql_error());

$i++;
Ну и собственно проблема заключается в том, что проверка тупо иногда не проходит, идёт запрос на запись данных в БД и происходит вылет с ошибкой дубликата ячейки в базе(ячейка, кстати, с атрибутом "UNIQUE").

В чом может быть причина такого?

p.s. Пробовал проверять через разные варианты реализации, и оно проверяет, но тоже иногда не проходит в любом варианте...
Так же пробовал просто записывать сразу в базу и если ошибка, тогда типа проверку не прошло и продолжал цикл, но это: 1-Не правельно, 2-В базе всё равно идёт автоинкремент ID.
Ещё пробовал ставить задержку usleep(); на пол секунды, ничего не помогло тоже...


И я даже во обще в ступоре, в чом проблема и как решить... Помогите пол может кто увидит ошибку или что подскажет.. Очень жду подсказок.
 

Фанат

oncle terrible
Команда форума
Это ты должен узнать сам.
У тебя есть вся информация, которую нам ты не предоставил.

вопросы вида "Дорогие ученые. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит" задавать бессмысленно
 

Keith Hendrix

Новичок
Да в том то и прикол что я уже всё что мог сам перепробовал, ничего не помогает... Вот решил поискать помощи... Ну лан буду думать ещё почему так происходит, но если кто что то увидит или кто мож сталкивался с точно таким же - пишите.
 

Keith Hendrix

Новичок
а я тебе написал, что надо было попробовать
Ты о ссылке шоль? Ну прочёл я ссылку и что там полезного? Ну я уже знаю где и в каком куске кода ошибка, но исправить ёё не могу, в твоей же ссылке так и пишет "Если уже нашли ошибку и причину ее появления но не знаете как от неё избавится - пишите на форум помогут".
Сам читал хоть свою ссыль, не?...

Ошибка я говорю в чом, тупо проскакивает проверка по базе данных и всё тут, что не пиши, каким запросом не проверяй, полюбому проскакивает, но при записи уже существующих данных непосредственно в базу ошибку выдает сразу и в каждый раз...

Вот с этим я и прошу помощи, а не с определением рода ошибки...
 

С.

Продвинутый новичок
Что конкретно возвращает выражение, когда записи нет:
PHP:
mysql_fetch_row(mysql_query("SELECT 1 FROM `DataBase` WHERE `Address`='{$randomKeys[2]}' LIMIT 1"))
 

Keith Hendrix

Новичок
Что конкретно возвращает выражение, когда записи нет:
PHP:
mysql_fetch_row(mysql_query("SELECT 1 FROM `DataBase` WHERE `Address`='{$randomKeys[2]}' LIMIT 1"))
Оно возвращает: Если такой записи нету=false иначе возвращает 1ну запись, т.е. =1.
Но дело не в проверке, ибо любая проверка проглючивает пару раз за цикл полюбому, я думаю проблема в самой базе или что то типа того... Ну если даже usleep(); не помогает то тут точно дело не в времени доступа к базе, а именно почему то она глючит...

И короче замутил без автоинкремента, но даже так есть пропускания при записи в БД, при чом в файл те же данные в той же итерации цикла пишет, почему так я просто хз, и наверно врядле кто мне поможет уже((
 

Keith Hendrix

Новичок
Это ты так предполагаешь или проверял?
Не знаю по кому ты так судишь что задаешь такие вопросы, но отвает да, я конечно же проверял и не один раз...

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


Чё нить дельное по решению хотел бы услышать конечно, но реализовал уже по другому, через заднее место конечно пришлось((, но что поделать...
 

С.

Продвинутый новичок
Не знаю по кому ты так судишь что задаешь такие вопросы, но отвает да, я конечно же проверял и не один раз...
Я сужу по 108% нубов, которые приходят сюда на форум и слезы горькие льют, что у них "ничего не работает",

Итак, когда предполагается, что записи не должно быть, но она находится, какая именно находится, с каким $randomKeys[2]?
 

Keith Hendrix

Новичок
Ну я редко на форумах помощь ищу, обычно гугл да документация и всё... Но тут очень уж специфическое дело было, я думал может кто сталкивался с таким...

Но это уже не актуально, ибо я уже по другому сделал реализацию.


И вот снова встал вопрос по MySQL, каким образом можна сделать так, что б поле ID(обычное поле CHAR), автоинкрементировалось только при удачной записи в таблицу?
Почитал про триггеры, возможно ими можна реализовать такое?
Задача такая: Есть 3 скрипта, они пишут инфу в базу, и пишут они паралельно, и естественно простое вычисление какой ID последний и прибавление к нему +1 не подходит...

А нужно что б когда любой из скриптов при удачном запросе на запись(INSERT) записал данные в таблицу, то таблица автоинкрементировала поле ID, а если запрос прошёл неудачно(т.е. данные уже есть в базе), тогда автоинкремент не сработал...
Очень надо вот так вот сделать в это счас у меня всё упирается просто...
 

С.

Продвинутый новичок
каким образом можна сделать так, что б поле ID(обычное поле CHAR), автоинкрементировалось только при удачной записи в таблицу?
Чувак, оно по-другому и не работает Оно инкрементируется ТОЛЬКО при удачной записи. А вот поле CHAR здесь совсем необычно.
 

Фанат

oncle terrible
Команда форума
Не знаю по кому ты так судишь что задаешь такие вопросы, но отвает да, я конечно же проверял и не один раз...
По тебе и твоим ответам, чувак.
По ссылке написано, и два раза повторено для тупых: при обращении на форум надо копировать сообщение об ошибке. В точности, целости и сохранности. А не лепетать своими словами в художественном пересказе.
По ссылке написано, что надо проверять значение переменных. О чем тебе опять написали, и ты опять не осилил привести здесь примеры добавляемого с ошибкой значения и значения из базы.

И раз ты не в состоянии выполнить эти примитивные действия самостоятельно, то и приходятся тебя в них носом тыкать.
 

Keith Hendrix

Новичок
Вопроса два:
1.Фанат ты тупой или как?
2.Каким образом я тебе приведу ошибки и код ошибки если их нету? Да и даже стандартная ошибка от MySQL там была совершено не при чом!!!

Это по предыдущей проблеме, но если у тебя глаза разуты, то ты мог бы и прочесть что прошлая проблема уже не актуальна!!! Теперь мне нужен совет!! ОШИБОК НЕТУУУУУУУУУУУУУУУ, АУУУУУУУ НЕТУ ОШИБОООООККК!!!!!!! УВИДЕЛ НЕ?

Но если ты до сих пор ничего не увидел что я тебе писал чуть выше то я в печали...


Во общем жду адекватные советы как реализовать что б при паралельной записи IDшники инкрементировались правильно. Т.е. когда запись с ID-5 в БД прошла успешно, следующая запись шла с ID-6, и не важно время между записями, секунда или милисекунда.... А когда запись прошла неудачно, то автоинкремент игнорировался, ещё раз повторюсь читал про григгеры, возможно кто понимает в них знает как можна типа при успешном INSERT поле ID +1 иначе просто завершить запрос и вернуть false.
 

Фанат

oncle terrible
Команда форума
и снова вспоминается последний анекдот из соответствующей рубрики :)

чувак явно профессионал 80 уровня по умению ломиться в открытую дверь.
 

Фанат

oncle terrible
Команда форума
хотя, возможно, он просто не понимает, что такое автоинкремент
 
Сверху