2012-03-23 67 views
0

我在Code Igniter模型中创建了一个新的“视频”。如何引用我刚刚插入到MySQL表中的行?

// Creates a new video. 
public function newVideo($title, $description) { 
    $this->db->query("INSERT INTO videos VALUES (NULL, '$title', '$description')"); 
    return // id of this new row 
} 

如何获得我的MySQL表中这个新行的ID?我可以得到最后一行并添加1,但可能会有并发性错误,我相信。

回答

6

很简单的答案并不真正需要超过30个字符不是吗?

$this->db->insert_id(); 
+0

谢谢,我也在这里看到了这个答案(http://codeigniter.com/forums/viewthread/63052/)。它是否兼容? – 2012-03-23 00:23:26

+0

是的,从db模块中获取insert_id是我知道的唯一安全方法。类似这里提供的更长时间的解决方案的方法在过去让我陷入了DB列车残骸! – 2012-03-23 00:27:40

5

也许你需要像这样

$this->db->insert_id(); 
+0

它会返回最后插入行的ID – 2012-03-23 00:21:22

+0

谢谢,我在这里看到这个答案太(http://codeigniter.com/forums/ viewthread/63052 /)。它是否兼容? – 2012-03-23 00:23:44

+0

是............ – 2012-03-23 00:26:03

1

尝试类似的东西:

$lastID = -1; //That's where it'll be stored 

$query = "SELECT LAST_INSERT_ID()"; 
$result = mysql_query($query); 

if ($result) 
{ 
    $row = mysql_fetch_row($result); 
    $lastID = $row[0]; 
} 
+0

这是要求并发性问题,不是吗?使用DB对象的insert_id将保证你刚才插入的行的id。 – 2012-03-23 00:24:53

+0

好吧,只是注意到它已经用'codeigniter'标记了。我的回答通常是有效的,但在这种情况下可能不是最短的一个... – 2012-03-23 00:25:02

+2

任何时候您使用LAST_INSERT_ID(),您将从您的表中获取最新的ID。如果两个人同时运行脚本,很可能会得到另一个脚本插入的行的ID。 – 2012-03-23 00:27:18

0

另一个解决方法是,你可以查看数据库中的视频表,并将视频ID作为自动编号,这将自动为您的视频ID,然后你可以试试这个:

//on your model 
$sql = "INSERT INTO videos (title,description) VALUES('$title', '$description')"; 
$this->db->query($sql); 

//retrieve new video id 
$this->db->insert_id() 
相关问题