Структура базы: [sql]`time` INT UNSIGNED NOT NULL, `ip` INT SIGNED NOT NULL, PRIMARY KEY (`ip`)[/sql] Делаю процедуру: [sql]DELIMITER $$ CREATE PROCEDURE ipchecker(IN ip INT, OUT funcReturn INT) BEGIN DECLARE iptime, thistime INT; SET thistime = UNIX_TIMESTAMP(); SELECT `time` INTO iptime FROM ip_table WHERE `ip`=ip; IF FOUND_ROWS( ) = 0 THEN INSERT INTO ip_table VALUES (thistime, ip); SET funcReturn = 1; ELSEIF (iptime <= (thistime-43200)) THEN UPDATE ip_table SET `time`=thistime WHERE `ip`=ip; SET funcReturn = 1; ELSE SET funcReturn = 0; END IF; END$$ DELIMITER;[/sql] Смысл каков: Вызываю процедуру CALL ipchecker(IP, @checkresult). Если ip нет в базе, делается запись и возвращается 1 в @checkresult. Если запись есть и она старше 12 часов, обновляю и возвращаю 1 в @checkresult, в противном случае возвращаю 0 в @checkresult. Проблема в том, что после первой же записи возвращает всегда 0, вне зависимости от передаваемого IP. Проверил всю процедуру, уже три часа бьюсь не понимаю - ip проходит в процедуру разный, но выборка SELECT идет как будто без WHERE и в iptime подставляется первая же метка. Из-за этого FOUND_ROWS = 1. Из-за свежести первой метки, попадаем в последний логический блок. По отдельности (с изменением синтаксиса) запросы работают как нужно. А в процедуре - нет. В чем проблема?
ПИПЕЦ! Игор происходит из-за одинаковых названий столбцов и переменных. И это, несмотря на обратные кавычки.