如何得到最后插入标识后插入查询编码器活动记录

我有一个插入查询(活动记录样式) ,用于将表单字段插入到 MySQL 表中。我希望获得插入操作的最后一个自动递增的 id 作为查询的返回值,但是我在这方面遇到了一些问题。

控制器内部:

function add_post(){
$post_data = array(
'id'            => '',
'user_id'   =>  '11330',
'content'   =>  $this->input->post('poster_textarea'),
'date_time' => date("Y-m-d H:i:s"),
'status'        =>  '1'
);
return $this->blog_model->add_post($post_data);
}

内部模型:

function add_post($post_data){
$this->db->trans_start();
$this->db->insert('posts',$post_data);
$this->db->trans_complete();
return $this->db->insert_id();
}

在模型中,我没有得到 add _ post 的返回值

539598 次浏览

试试这个

function add_post($post_data){
$this->db->insert('posts', $post_data);
$insert_id = $this->db->insert_id();


return  $insert_id;
}

在多个插入的情况下,您可以使用

$this->db->trans_start();
$this->db->trans_complete();
$id = $this->db->insert_id();

这里不需要交易,这应该足够了:

function add_post($post_data) {
$this->db->insert('posts',$post_data);
return $this->db->insert_id();
}

来自 文件:

$this-> db-> insert _ id ()

执行数据库插入时的插入 ID 号。

因此,您可以使用这样的东西:

$lastid = $this->db->insert_id();

必须使用 $lastId = $this->db->insert_id();

因为您已经通过数据插入启动了事务,所以, 第一个检查事务是否完成。一旦启动事务,它应该根据事务的状态提交或回滚;

function add_post($post_data){
$this->db->trans_begin()
$this->db->insert('posts',$post_data);
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE){
$this->db->trans_rollback();
return 0;
}else{
$this->db->trans_commit();
return $this->db->insert_id();
}
}``

在上面的代码中,我们已经提交了成功事务的数据,即使您得到了时间戳

为了完成这个主题: 如果使用主键和自动递增设置表,则可以省略手动递增 id 的过程。

看看这个例子

if (!$CI->db->table_exists(db_prefix() . 'my_table_name')) {
$CI->db->query('CREATE TABLE `' . db_prefix() . "my_table_name` (
`serviceid` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`hash` varchar(32) NOT NULL,
`url` varchar(120) NOT NULL,
`datecreated` datetime NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=" . $CI->db->char_set . ';');

现在可以插入行了

$this->db->insert(db_prefix(). 'my_table_name', [
'name'         => $data['name'],
'hash'            => app_generate_hash(),
'url'     => $data['url'],
'datecreated'     => date('Y-m-d H:i:s'),
'active'          => $data['active']
]);
**Inside Model**
function add_info($data){
$this->db->insert('tbl_user_info',$data);
$last_id = $this->db->insert_id();
return  $last_id;
}


**Inside Controller**
public function save_user_record() {
$insertId =  $this->welcome_model->save_user_info($data);
echo $insertId->id;
}

使用 mysqli PHP 驱动程序,在提交之后无法获得 insert _ id。

真正的解决办法是:

function add_post($post_data){
$this->db->trans_begin();
$this->db->insert('posts',$post_data);


$item_id = $this->db->insert_id();


if( $this->db->trans_status() === FALSE )
{
$this->db->trans_rollback();
return( 0 );
}
else
{
$this->db->trans_commit();
return( $item_id );
}
}

源代码结构: https://codeigniter.com/user_guide/database/transactions.html#running-transactions-manually

值得一提的是,其他答案与 Codeigniter 版本3有关。版本4(找到了 https://codeigniter.com/user_guide/database/helpers.html)中的答案是使用 $this->db->insertID()