3

插入失败后 insert_id() 会返回什么?

4

4 回答 4

10

我认为这取决于您使用的驱动程序。在mysql的情况下,函数定义是:

/**
* Insert ID
*
* @access   public
* @return   integer
*/
function insert_id()
{
    return @mysql_insert_id($this->conn_id);
}

现在阅读mysql_insert_id

mysql_insert_id (PHP 4, PHP 5) 获取上一次查询生成的ID

参数:
资源 $link_identifier [可选]

返回:
类型:int

描述:上一个查询成功时为 AUTO_INCREMENT 列生成的 ID,如果上一个查询没有生成 AUTO_INCREMENT 值,则为 0,如果没有建立 MySQL 连接,则为 false。

1.- 所以它可以返回一个 ID,0(零)或 false。
2.- 当你要求 afailed insert它应该返回 0(零)。


请注意,有一个at sign (@)错误运算符将忽略mysql_insert_idPHP 函数返回的任何错误消息。

于 2012-05-08T18:10:09.790 回答
3

如果您查看数据库驱动程序本身,每个版本的insert_id实现方式都不同,具体取决于底层数据库。例如,MySQLinsert_id函数只是 的包装器mysql_insert_id,它返回:

上一个查询成功时为 AUTO_INCREMENT 列生成的 ID,如果上一个查询没有生成 AUTO_INCREMENT 值,则为 0,如果没有建立 MySQL 连接,则为 FALSE。

另一方面,postgres 函数显式返回一个 ID(尽管我认为如果查询本身失败可能会引发异常):

    $query = $this->query($sql);
    $query = $query->row();
    return (int) $query->ins_id;
于 2012-05-08T17:57:38.313 回答
1

大多数 codeigniter 函数如果没有值可以返回 false。我的意思是它不会返回 insert_id ,因为由于错误而没有提供 insert_id 。

于 2012-05-08T17:47:43.490 回答
1

它仅在执行数据库插入时返回 id。

如果成功,它将通过先前的查询生成 AUTO_INCREMENT 列。如果失败,则返回 0 如果没有建立 MySQL 连接,则返回 FALSE。

于 2012-05-08T17:50:59.870 回答