[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: AUTO_INCREMENT в базе данных
ElfSam
Вот решил немного изменить структуру в базе данных и сразу напоролся на проблему.
У меня две таблицы:
predpr
Свернутый текст
| id | adress | director | id_code | telephone |


users
Свернутый текст
| id | login | password |




Спустя 6 минут, 1 секунда (20.08.2009 - 14:39) ElfSam написал(а):
Собственно связь в этих таблицах 1 к 1 и можно было одну таблицу создать, но я захотел логин/пароль вынести в отдельную таблицу.
Первичный ключ в таблице predpr - это id, по нему будут связаны все таблицы в моей бд (пока созданы тока 2). Все поля в этих таблицах вводятся пользователем при регистрации, кроме этого id. Он AUTO_INCREMENT.
Проблема возникла когда я заношу в бд регистрационные данные
PHP
//Добавляем данные в таблицу predpr
                
$str_sql = ("INSERT INTO `predpr` (`adress`, `director`, `id_code`, `telephone`) VALUES 

('"
.$adress."', '".$name."', '".$id_code."', '".$telephone."')");
                
$result1 mysql_query($str_sql) or die (mysql_error() ."<br/>" $str_sql);

//Получаем из таблицы predpr первичный ключ (id)
                
$str_sql=("SELECT `id` FROM `predpr` WHERE `id_code`='".$id_code."'");
                
$result mysql($str_sql) or die (mysql_error()."<br/>".$str_sql);
                
$mas=mysql_fetch_assoc($result);
                
$id=$mas['id'];

//Добавляем данные в таблицу users
                
$str_sql = ("INSERT INTO `users` (`id`, `login`, `password`)VALUES ('".$id."', '".$login."', 

'"
.$pass."')");
                
$result2 mysql_query($str_sql) or die (mysql_error() ."<br/>" $str_sql);
                if(
$result1 && $result2//если данные добавлены
                  
{
                     echo 
'<div class="alert">';
                     echo 
'<h2> Ваш профиль успешно занесен в базу данных </h2> <p>';
                     echo 
'<h3> <a href="main.php"> <<< На главную </a> </h3>';
                     echo 
' </div> ';
                  }


Спустя 5 минут, 57 секунд (20.08.2009 - 14:45) ElfSam написал(а):
Тут сперва записываются личные данные пользователя в таблицу predpr. id автоматически принимает значение (допустим 1). Дальше я хоче занести логин/пароль в таблицу users. Логин и пароль указаны пользователем в форме регистрации, а проклятый id я пытаюсь прочитать из таблицы predpr, шоб его потом занести в users, но тут и выдается ошибка:

Warning: Wrong parameter count for mysql() in D:\Server\localhost\diplom\reg_action.php on line 51

SELECT `id` FROM `predpr` WHERE `id_code`='3086005512'

sad.gif

Подскажите, что я не так делаю

Спустя 21 минута, 10 секунд (20.08.2009 - 15:06) Michael написал(а):
Вон у тебя $result = mysql($str_sql) вместо $result = mysql_query($str_sql)

Также пиши вместо абзаца
//Получаем из таблицы predpr первичный ключ (id)
код:
PHP
$id=mysql_insert_id();

- возвращает значение предыдущей сработки авто инкремента

Спустя 23 минуты, 56 секунд (20.08.2009 - 15:30) REANIMATOR написал(а):
а ещё id_code это число обычно int, а ты ищешь string. Убери кавычки '3086005512'

и при добавлении тоже убери кавычки (там где '".$id."')
PHP
("INSERT INTO `users` (`id`, `login`, `password`)VALUES ('".$id."', '".$login."', 

'"
.$pass."')");

Спустя 59 минут, 41 секунда (20.08.2009 - 16:30) ElfSam написал(а):
Вот оно:
PHP
$id=mysql_insert_id();

Все заработало! Спасибо!

Спустя 20 минут, 14 секунд (20.08.2009 - 16:50) Gabriel написал(а):
PHP
("INSERT INTO `users` (`id`, `login`, `password`)VALUES ('".$id."', '".$login."', '".$pass."')");

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

Спустя 3 минуты, 40 секунд (20.08.2009 - 16:53) Michael написал(а):
Don Gabliel smile.gif автоинкримент у него только по первой таблице.

Спустя 6 минут, 32 секунды (20.08.2009 - 17:00) Gabriel написал(а):
blink.gif а шож его по всем не сделать и радоваться жизни?

Спустя 2 часа, 1 минута, 21 секунда (20.08.2009 - 19:01) Michael написал(а):
Цитата (Gabriel @ 20.08.2009 - 14:00)
blink.gif а шож его по всем не сделать и радоваться жизни?

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

Спустя 14 часов, 53 минуты, 39 секунд (21.08.2009 - 09:55) ElfSam написал(а):
Помогите мне!
Вот sql-запрос
PHP
$str_sql=(" REPLACE INTO `predpr` VALUES ('".$_SESSION['id']."', '".$adress."', '".$name."', '".$id_code."', '".$telephone."' ");


Выдается ошибка:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

REPLACE INTO `predpr` VALUES ('6', '84635, Фруктовая 7/22', 'Самойлов Дмитрий', '3086005512', '---'

Что тут не так в синтаксисе? С командной строки такой запрос нормально выполняется

Спустя 1 час, 27 минут, 30 секунд (21.08.2009 - 11:23) Michael написал(а):
Скобочки закрывающей не вижу:
SQL
REPLACE INTO `predpr` VALUES ('6', '84635, Фруктовая 7/22', 'Самойлов Дмитрий', '3086005512', '---') ;

Спустя 1 минута, 57 секунд (21.08.2009 - 11:24) Michael написал(а):
А что это за скобки которые ты ставишь при назначении строк переменным?
Зачем они вообще нужны?
PHP
$str_sql=(" REPLACE INTO `predpr` VALUES ('".$_SESSION['id']."', '".$adress."', '".$name."', '".$id_code."', '".$telephone."' ");

Спустя 52 минуты, 5 секунд (21.08.2009 - 12:17) ElfSam написал(а):
сам не знаю

Спустя 2 минуты, 54 секунды (21.08.2009 - 12:19) ElfSam написал(а):
Но скобку действительно я пропустил. Спасибо за подсказку
Быстрый ответ:

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