2012-07-11 63 views
0

我有这个代码,我想要做的是获得主键最后插入到用户表,然后把它放到库表的外键。我不知道如何处理$ request或在这里做什么?获得主键作为外键放在其他表

public function register($request = array()) { 
    $data = array(
     'user_name' => $request['username'], 
     'password' => $request['password'], 
     'email' => ($request['email']) 
    ); 
    $data1 = array(
     'user_id' => '5',// this is where I have to put the primary key from last table 
     'library_name' => $request['lib_name'] 
    ); 

    $this->model->insert('user', $data); 
    $this->model->insert('library', $data1); 
    $this->redirect('uploadSongs.php'); 
} 
+0

你有一个支持外键MySQL的存储引擎? (InnoDB?) – Tobias 2012-07-11 12:02:54

回答

0

你可以这样做

public function register($request = array()) { 
    $data = array(
     'user_name' => $request['username'], 
     'password' => $request['password'], 
     'email' => ($request['email']) 
    ); 

    $this->model->insert('user', $data); 
    $user_id = $this->model->select('user', $data); //select user_id from db 
    $data1 = array(
     'user_id' => $user_id , 
     'library_name' => $request['lib_name'] 
    ); 



    $this->model->insert('library', $data1); 
    $this->redirect('uploadSongs.php'); 
} 
+0

这不是这样做的优化方式。有一个函数mysql_insert_id()为什么不使用这个 – 2012-07-11 12:13:09

+0

感谢poonam你的想法是有帮助的,只是一点改变我只需要从mysql_insert_id()获取ID,就像Faizan所说的那样,而不是使用select查询......毕竟,谢谢大家它的工作:) – Saqib 2012-07-11 15:27:54

1

使用mysql_insert_id()

- 返回由以前的INSERT或UPDATE语句为AUTO_INCREMENT列生成的值。

+0

它应该工作,如果我已经索引第二表的外键和应用级联删除和更新? – Saqib 2012-07-11 12:17:00

+0

我试过了,但它总是返回'0',为什么? – Saqib 2012-07-11 12:18:35

+0

阅读它亲爱的..看到这个链接例如.. http://www.w3schools.com/php/func_mysql_insert_id.asp – manurajhada 2012-07-11 12:23:05

0

你可以如果你使用任何框架,这样

public function register($request = array()) { 
$data = array(
    'user_name' => $request['username'], 
    'password' => $request['password'], 
    'email' => ($request['email']) 
); 
$data1 = array(
    'library_name' => $request['lib_name'] 
); 

$this->model->insert('user', $data); 
$user_id = mysql_insert_id(); 
$data1['userid'] = $user_id; 
$this->model->insert('library', $data1); 
$this->redirect('uploadSongs.php'); 

} 做到这一点。然后他们有辅助功能得到最后插入ID,你应该使用他们

+0

我要做什么$ user_id = mysql_inser_id() ;这里虽然我需要大约$ data1 = array('user_id'=> // here) – Saqib 2012-07-11 12:23:32

+1

那么你需要在数组发送到insert之前构建数组。我动态地将元素添加到数组中,我得到userid – 2012-07-11 12:25:27

0

感谢球员,它的工作,我需要做的只是改变逻辑,我愚蠢地使用它,并没有看到在哪里放置插入查询,以便它的工作现在我所要做的只是改变插入查询的地方给出

public function register($request = array()) { 
$data = array(
    'user_name' => $request['username'], 
    'password' => $request['password'], 
    'email' => ($request['email']) 
); 

$this->model->insert('user', $data); 
$data1 = array(
    'user_id' => mysql_insert_id(),// now it works as insert has been done above .... 
    'library_name' => $request['lib_name'] 
); 
$this->model->insert('library', $data1); 
$this->redirect('uploadSongs.php');