依靠“mysql_insert_id”

时间:2011-12-26 10:33:54

标签: php mysql

想一个名为foo的表,其中包含id (PRIMARY & AUTO_INCREMENT)列。我在这个表中插入一行,然后在此时开始挑战。

$db->query("INSERT INTO `foo` (id, row1, ...) VALUES('', '$row1', ...)");
if (!$db->is_error && $db->last_insert_id) {
   $id = $db->last_insert_id;
   do_really_important_things_with_last_ID($id);
   do_another_important_things_with_last_ID($id);
   ...
   do_ ... with_last_ID($id);
   do_ ... with_last_ID($id);
}

我在插入查询后立即调用它并在获取last_insert_id时使用当前的连接链接,但不知道它是如何重要的(?)。

$this->dbh = @mysql_connect(.....);
...
// query function
$this->result = @mysql_query($query, $this->dbh);
...
if (preg_match("/insert/i", $query)) {
   $this->last_insert_id = @mysql_insert_id($this->dbh);
}


我是否应该依赖mysql_insert_id

来担心此实施

3 个答案:

答案 0 :(得分:5)

last_insert_id应该是一个函数,它将返回插入的id

function last_insert_id(){
 return @mysql_insert_id();
}

if (!$db->is_error && $db->last_insert_id()) {
   $id = $db->last_insert_id();
   do_really_important_things_with_last_ID($id);
   do_another_important_things_with_last_ID($id);
   ...
   do_ ... with_last_ID($id);
   do_ ... with_last_ID($id);
}

答案 1 :(得分:4)

请查看http://dev.mysql.com/doc/refman/5.1/en/getting-unique-id.html了解更多信息,它说:

  

“对于LAST_INSERT_ID(),最近生成的ID保留在   服务器基于每个连接。它不会被另一个人改变   客户。如果您更新另一个AUTO_INCREMENT,它甚至不会更改   具有非魔法值的列(即,非NULL和值的值)   不是0)。使用LAST_INSERT_ID()和AUTO_INCREMENT列   同时来自多个客户端是完全有效的。每个客户   将收到客户端最后一条语句的最后插入ID   执行“。

所以你应该做得很好,你不应该得到奇怪的结果。

答案 2 :(得分:3)

@Anton是对的。想添加以下内容。

  

在事务中使用时,必须先调用mysql_insert_id()   犯。否则,它将返回不可预测的结果。

礼貌http://php.net/manual/en/function.mysql-insert-id.php