[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: генерация следующего id в таблице
kent666
Все привет.

Не работает метод класса генерации нового id для таблицы
    /** 
* функция возвращает значние id
*/

public function GenID($seqname, $prefix = '')
{
$this->sql = 'SELECT MAX('.$prefix.'id) FROM '. $this->escapeString($seqname);

$this->res = $this->Execute($this->sql, true);

if(mysql_num_rows($this->res) > 0)
{
$this->res = mysql_fetch_assoc($this->res);

return $this->res[$prefix.'id']+1;
}
else return 1;
}


Метод Execute - обертка mysql_query

Если выставить в в обертке вывод запроса, то вроде бы все должно работать нормально! Это запрос при непосредственном внесении в php-my-admin делает нормальную выборку!
Может проблема что я не могу извлечь ЧИСЛО из результата запроса!
Посоветуйте как мне быть! :)



Спустя 7 минут, 34 секунды (21.12.2011 - 15:24) m4a1fox написал(а):
kent666
Чет не пойму я. Вы же выбираете максимальное значение MAX. Он и должен быть один. А второго там не будет, или я ошибаюсь?

Спустя 1 минута, 35 секунд (21.12.2011 - 15:25) kent666 написал(а):
m4a1fox все правильно!
Но как извлечь это число из результата запроса

Спустя 47 секунд (21.12.2011 - 15:26) sharki написал(а):
Читай про ALIAS

Спустя 44 секунды (21.12.2011 - 15:27) kent666 написал(а):
У меня наверно не корректно работает блок
        if(mysql_num_rows($this->res) > 0)
{
$this->res = mysql_fetch_assoc($this->res);

return $this->res[$prefix.'id']+1;
}

Спустя 4 минуты, 24 секунды (21.12.2011 - 15:31) m4a1fox написал(а):
kent666
Цитата
Но как извлечь это число из результата запроса

Теперь понятнее.... то есть по сути должна быть цифра а ее нет! Получается как с сусликом.
- Ты суслика видишь?
- Нет!
- И я не вижу! А он есть!

Спустя 2 минуты, 58 секунд (21.12.2011 - 15:34) kent666 написал(а):
m4a1fox biggrin.gif

Что то я не могу понять при чем тут ALIAS?

Спустя 1 минута, 46 секунд (21.12.2011 - 15:36) sharki написал(а):
Мдец, как же вы любите разводить холивары
  public function GenID($seqname, $prefix = '') 
{
$this->sql = 'SELECT MAX('.$prefix.'id) AS `max` FROM '. $this->escapeString($seqname);

$this->res = $this->Execute($this->sql, true);

if(mysql_num_rows($this->res) > 0)
{
$max_num = mysql_fetch_assoc($this->res);

return $max_num['max']+1;
}
else return 1;
}

Спустя 9 минут, 10 секунд (21.12.2011 - 15:45) kent666 написал(а):
sharki спасибо! Все заработало. Хотя если честно не понимаю зачем надо было добавлять алиас к id.
unsure.gif

Спустя 1 минута, 53 секунды (21.12.2011 - 15:47) sharki написал(а):
kent666
Чтобы получить конкретное поле, для удобства в данном случае.

Ты хоть понял в чем твоя ошибка была?

Спустя 7 минут, 49 секунд (21.12.2011 - 15:55) kent666 написал(а):
ну частично.
А без алиаса нельзя было?
Я же выбрал именно 1 ячейку с максимальным id
и обращался к именно к ней!

Спустя 34 секунды (21.12.2011 - 15:55) sharki написал(а):
kent666
Это не основная ошибка

Спустя 3 минуты, 39 секунд (21.12.2011 - 15:59) kent666 написал(а):
А какая основная.
$this->res = mysql_fetch_assoc($this->res);

Эта?

Спустя 6 минут, 31 секунда (21.12.2011 - 16:05) sharki написал(а):
Ага, вообще это говнокод, ибо все РАБОЧИЕ переменный надо создавать и инициализировать непосредственно перед их использованием, т.к в будущем ты будет сто тыщ раз листать код в поисках той самой переменной, а может где-то её уже изменили.

Спустя 6 минут, 6 секунд (21.12.2011 - 16:12) kent666 написал(а):
:D
Вообще то у меня изначально была отдельная переменная!
$this->row

Просто я уже шаманил над этим методом столько что менял ее несколько раз!
В первоначальном варианте с
$this->row = mysql_fetch_assoc($this->res);

У меня класс все равно не работал.
проблема решилась когда я добавил алиас

Спустя 27 минут, 23 секунды (21.12.2011 - 16:39) sergeiss написал(а):
Я вот что не понял...

Цитата (kent666 @ 21.12.2011 - 16:16)
Посоветуйте как мне быть! smile.gif


Почему никто не посоветовал ЗАБЫТЬ про этот дерьмо-код и сделать нормальное автоинкрементное поле???
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.