PHP + Глюк с записью в MySQL по ID.
От: Buggy  
Дата: 22.04.06 18:04
Оценка:
Нужно узнать последний 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 больше, как и надо.
Re: PHP + Глюк с записью в MySQL по ID.
От: ilih  
Дата: 22.04.06 18:14
Оценка: +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 больше, как и надо.


может вам сделать поле id AUTO_INCREMENT ?
Re: PHP + Глюк с записью в MySQL по ID.
От: kan_izh Великобритания  
Дата: 22.04.06 18:57
Оценка:
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
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: PHP + Глюк с записью в MySQL по ID.
От: Buggy  
Дата: 22.04.06 22:59
Оценка:
Здравствуйте, 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.
Re[3]: PHP + Глюк с записью в MySQL по ID.
От: kan_izh Великобритания  
Дата: 23.04.06 11:01
Оценка:
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
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: PHP + Глюк с записью в MySQL по ID.
От: Buggy  
Дата: 23.04.06 11:22
Оценка:
Здравствуйте, 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. Почему это происходит?
Re[5]: PHP + Глюк с записью в MySQL по ID.
От: Buggy  
Дата: 23.04.06 11:24
Оценка:
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,
Re[5]: PHP + Глюк с записью в MySQL по ID.
От: kan_izh Великобритания  
Дата: 23.04.06 11:25
Оценка:
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
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: PHP + Глюк с записью в MySQL по ID.
От: SeLarin Россия http://selarin.livejournal.com
Дата: 23.04.06 12:47
Оценка:
Здравствуйте, Buggy, Вы писали:

B>Так я и использовал AUTO_INCREMENT, но дело в том что он мне записывает два раза.


Если у тебя поле id AUTO_INCREMENT, то тебе его не нужно явно указывать в запросе. Использу просто
mysql_query("INSERT INTO referals (login) VALUES ('refuser1@rambler.ru')");


Если вещь не годна для одной цели, ее можно употребить для другой. // Лао цзы
Re[5]: PHP + Глюк с записью в MySQL по ID.
От: __MasteR__ Россия  
Дата: 23.04.06 16:24
Оценка:
Здравствуйте, 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);
Re[3]: PHP + Глюк с записью в MySQL по ID.
От: Grog13 Финляндия  
Дата: 23.04.06 17:14
Оценка:
Здравствуйте, 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.


Поле автоинкремента надо сделать в БД и все вопросы отпадут.
При инсерте вообще не надо указывать тогда это поле

$sql = "INSERT INTO my_table (login) VALUES ('refuser1@rambler.ru')";
mysql_query($sql);
$last_id = mysql_insert_id();
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: PHP + Глюк с записью в MySQL по ID.
От: Бусел Беларусь  
Дата: 24.04.06 00:44
Оценка:
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');
Re: PHP + Глюк с записью в MySQL по ID.
От: Neron Германия  
Дата: 24.04.06 07:08
Оценка: -1
Здравствуйте, Buggy, Вы писали:

B>mysql_query("INSERT INTO referals SET id=$num, login='refuser1@rambler.ru'");


Это не глюк а неправильный запрос

Нужно так:

mysql_query("INSERT INTO referals (id, login) VALUES ($num, 'refuser1@rambler.ru');");
Re[2]: PHP + Глюк с записью в MySQL по ID.
От: Neron Германия  
Дата: 24.04.06 07:10
Оценка:
Buggy, нужно писать запросы на INSERT только так...
Re[2]: PHP + Глюк с записью в MySQL по ID.
От: __MasteR__ Россия  
Дата: 24.04.06 09:44
Оценка:
Здравствуйте, 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>


Запрос сам по себе правильный. Проблема была из-за неправильного использования/неиспользования колонок с автоинкрементом. Как правильно надо давно описано выше.
Re[3]: PHP + Глюк с записью в MySQL по ID.
От: Neron Германия  
Дата: 24.04.06 09:48
Оценка:
Здравствуйте, __MasteR__, Вы писали:

__M>Запрос сам по себе правильный. Проблема была из-за неправильного использования/неиспользования колонок с автоинкрементом. Как правильно надо давно описано выше.


Да вижу mysql_insert_id(), привильно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.