Нужно узнать последний id в базе данных и под новым id+1 вписать туда новую строку. Делаю так:
$rez = mysql_query("SELECT * from referals;");
$num = mysql_num_rows($rez);
$num++;
mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'");
В результате записывается два значения, например если у меня до запуска скрипта в базе был последний id=10, то после запуска там появятся сразу 11 и 12. А если указать конретно, например:
mysql_query("INSERT INTO referals SET id=11, login='refuser1@rambler.ru'");
то все нормально, появляется одна строчка с id=11.
Проанализировав, заметил что переменная $num сразу после вызова mysql_num_rows($rez); возвращает значение id на 2 больше, чем то которое есть в базе. А когда закоментировал mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'");, то все нормально оно возвращает на 1 больше, как и надо.
Здравствуйте, Buggy, Вы писали:
B>Нужно узнать последний id в базе данных и под новым id+1 вписать туда новую строку. Делаю так:
B>
B>$rez = mysql_query("SELECT * from referals;");
B>$num = mysql_num_rows($rez);
B>$num++;
B>mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'");
B>
B>В результате записывается два значения, например если у меня до запуска скрипта в базе был последний id=10, то после запуска там появятся сразу 11 и 12. А если указать конретно, например: B>
B>mysql_query("INSERT INTO referals SET id=11, login='refuser1@rambler.ru'");
B>
B>то все нормально, появляется одна строчка с id=11.
B>Проанализировав, заметил что переменная $num сразу после вызова mysql_num_rows($rez); возвращает значение id на 2 больше, чем то которое есть в базе. А когда закоментировал mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'");, то все нормально оно возвращает на 1 больше, как и надо.
Buggy wrote:
> $rez = mysql_query("SELECT * from referals;"); > $num = mysql_num_rows($rez); > $num++; > > mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'");
Ни в коем случае так нельзя делать в вебе. Можно так: http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html
А можно взять БД получше (например, Firebird), которая sequence позволяет, в некоторых случаях гораздо удобнее.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, kan_izh, Вы писали:
_>Ни в коем случае так нельзя делать в вебе. Можно так: http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html _>А можно взять БД получше (например, Firebird), которая sequence позволяет, в некоторых случаях гораздо удобнее.
Не помогает, mysql_insert_id можно вызывать только после insert, а мне нужно до него, чтобы узнать под каким id вписывать. А LAST_INSERT_ID() все время возвращает 0.
Buggy wrote:
> _>Ни в коем случае так нельзя делать в вебе. Можно так: > http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html > _>А можно взять БД получше (например, Firebird), которая sequence > позволяет, в некоторых случаях гораздо удобнее. > > Не помогает, mysql_insert_id можно вызывать только после insert, а мне > нужно до него, чтобы узнать под каким id вписывать. А LAST_INSERT_ID() > все время возвращает 0.
А зачем тебе знать? Используй AUTO_INCREMENT, как там написано.
Но то, что написал ты — работать не будет при одновременном доступе нескольких клиентов.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, kan_izh, Вы писали:
_>А зачем тебе знать? Используй AUTO_INCREMENT, как там написано.
_>Но то, что написал ты — работать не будет при одновременном доступе нескольких клиентов.
Так я и использовал AUTO_INCREMENT, но дело в том что он мне записывает два раза.
Допустим я делаю просто вызов
mysql_query("INSERT INTO referals SET id=NULL, login='refuser1@rambler.ru'");
Если поле id стоит авто инкремент, то mysql сам будет записывать в id новый идентификатор увеличенный на 1 от предыдущего. После выполнения, если например у меня последний id=10 , то после выполнения mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'"); у меня создаются две строки с id=11 и id=12, хотя должна только одна с id=11. Почему это происходит?
B>Так я и использовал AUTO_INCREMENT, но дело в том что он мне записывает два раза. B>Допустим я делаю просто вызов B>mysql_query("INSERT INTO referals SET id=NULL, login='refuser1@rambler.ru'"); B>Если поле id стоит авто инкремент, то mysql сам будет записывать в id новый идентификатор увеличенный на 1 от предыдущего. После выполнения, если например у меня последний id=10 , то после выполнения mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'"); у меня создаются две строки с id=11 и id=12, хотя должна только одна с id=11. Почему это происходит?
Ой извиняюсь опечатка там не mysql_query("INSERT INTO referals SET id=$num, а просто mysql_query("INSERT INTO referals SET id=NULL,
Buggy wrote:
> Допустим я делаю просто вызов > mysql_query("INSERT INTO referals SET id=NULL, > login='refuser1@rambler.ru'"); > Если поле id стоит авто инкремент, то mysql сам будет записывать в id > новый идентификатор увеличенный на 1 от предыдущего. После выполнения, > если например у меня последний id=10 , то после выполнения > mysql_query("INSERT INTO referals SET id=$num, > login='refuser1@rambler.ru'"); у меня создаются две строки с id=11 и > id=12, хотя должна только одна с id=11. Почему это происходит?
INSERT 2 раза происходит, очевидно. Чудес не бывает.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Buggy, Вы писали:
B>Здравствуйте, kan_izh, Вы писали:
_>>А зачем тебе знать? Используй AUTO_INCREMENT, как там написано.
_>>Но то, что написал ты — работать не будет при одновременном доступе нескольких клиентов.
B>Так я и использовал AUTO_INCREMENT, но дело в том что он мне записывает два раза. B>Допустим я делаю просто вызов B>mysql_query("INSERT INTO referals SET id=NULL, login='refuser1@rambler.ru'"); B>Если поле id стоит авто инкремент, то mysql сам будет записывать в id новый идентификатор увеличенный на 1 от предыдущего. После выполнения, если например у меня последний id=10 , то после выполнения mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'"); у меня создаются две строки с id=11 и id=12, хотя должна только одна с id=11. Почему это происходит?
надо делать просто вызов
//Здесь просто вносим строку не указывая значения идентификатора
mysql_query ('insert into `referats`(`login`) values("refuser1@rambler.ru")');
//Если нам небходимо узнать какой идентификатор был присвоен только что вставленнно строке, то пишем
$id = mysql_insert_id ();
//Теперь можем модифицировать нашу строку
mysql_query ('update `referats` set `login`="jopa" where `id`=' . $id);
Здравствуйте, Buggy, Вы писали:
B>Здравствуйте, kan_izh, Вы писали:
_>>Ни в коем случае так нельзя делать в вебе. Можно так: http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html _>>А можно взять БД получше (например, Firebird), которая sequence позволяет, в некоторых случаях гораздо удобнее.
B>Не помогает, mysql_insert_id можно вызывать только после insert, а мне нужно до него, чтобы узнать под каким id вписывать. А LAST_INSERT_ID() все время возвращает 0.
Поле автоинкремента надо сделать в БД и все вопросы отпадут.
При инсерте вообще не надо указывать тогда это поле
B>Так я и использовал AUTO_INCREMENT, но дело в том что он мне записывает два раза.
После выполнения, если например у меня последний id=10, то после выполнения
mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'");
у меня создаются две строки с id=11 и id=12, хотя должна только одна с id=11. Почему это происходит?
Лично я предпочитаю пользоваться стандартом SQL92, а вот такой запрос тоже вставит 2 записи????
INSERT INTO referals (login) VALUES ('refuser1@rambler.ru');
Здравствуйте, Neron, Вы писали:
N>Здравствуйте, Buggy, Вы писали:
B>>mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'");
N>Это не глюк а неправильный запрос
N>Нужно так:
N>
N>mysql_query("INSERT INTO referals (id, login) VALUES ($num, 'refuser1@rambler.ru');");
N>
Запрос сам по себе правильный. Проблема была из-за неправильного использования/неиспользования колонок с автоинкрементом. Как правильно надо давно описано выше.
Здравствуйте, __MasteR__, Вы писали:
__M>Запрос сам по себе правильный. Проблема была из-за неправильного использования/неиспользования колонок с автоинкрементом. Как правильно надо давно описано выше.