2013-12-18 2 views
-1

У меня есть простая программа регистрации с использованием рамки CodeIgniter, в которой пользователь вводит свое имя, имя пользователя и пароль, а затем эти значения сохраняются в моей базе данных.Ошибка ограничения внешнего ключа при вставке в 2 таблицы

У меня возникают трудности при попытке вставить в 2 таблицы, я получаю ошибку внешнего ограничения. Теперь 2 таблицы я должен выглядеть так (простите мое форматирование не слишком уверен, как форматировать таблицы здесь):

Table1 
ID INT Auto-Increment Primary key 
Username varchar 
Password varchar 

И мой второй стол

Table2 
ID INT Foreign key 
Name varchar 

Теперь мой PHP код я использую, чтобы добавить эти значения:

 $data = array('username' => $username, 'password' => $hashpwd); 
     $this->db->insert('Table1', $data); 
     $profiles = array('name' => $name); 
     $this->db->insert('Table2', $profiles); 

так как вы можете видеть, что я добавить в table1 первый и этот запрос работает отлично и вставляется в моей базе данных, однако второй запрос не добавляются в базу данных, и я получаю следующее Ошибка:

Cannot add or update a child row: a foreign key constraint fails (`mydb`.`table2`, CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `table1` (`ID`)) 

INSERT INTO `table2` (`name`) VALUES ('John') 

Может кто-то, как я могу добавить к обеим таблицам без поместить идентификатор, так как я не знаю, что такое ID?

ответ

0

Вы должны вставить в таблицу2 также идентификатор, уже существующий в таблице1, а не только поле «имя». Вы можете получить идентификатор последней вставки в таблице 1, используя http://www.php.net/manual/en/mysqli.insert-id.php (требуется php5).

+0

Я использовал CIs, встроенный в методы, но да, это то, что я сделал. – user3116846

0

Вы можете сделать столбец Table2.ID нулевым.

Однако, поскольку вы только что создали ID через INSERT в Table1, я думаю, вы можете просто использовать этот вновь созданный ID.

Он также кажется Name должен быть на Table1, но я не уверен, что они на самом деле делают.

+0

Как я могу использовать вновь созданный идентификатор? Я не хочу, чтобы он был нулевым, потому что я хочу, чтобы он имел то же значение, что и вставка в первой таблице, а затем я могу использовать его как идентификатор позже, если мне нужно. Также имя не должно быть в таблице 2. – user3116846

+0

@ user3116846 'SELECT LAST_INSERT_ID()' –

+0

Можно ли это поместить прямо в мой массив или мне нужно будет выполнить запрос, а затем сохранить его в переменной? – user3116846

Смежные вопросы