Php Codeigniter$this->db->insert_id()在mysqli上返回0,但$this->db->query('SELECT LAST_insert_id()')有效

Php Codeigniter$this->db->insert_id()在mysqli上返回0,但$this->db->query('SELECT LAST_insert_id()')有效,php,mysql,codeigniter,mysqli,Php,Mysql,Codeigniter,Mysqli,这是我的数据库配置:- $db['default'] = array( 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'test_db', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconn

这是我的数据库配置:-

$db['default'] = array(
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'test_db',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => TRUE,
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
我使用这个插入用户,并在骰子上输出最后一个id

它输出0

但当我使用:-

$query = $this->db->query('SELECT LAST_INSERT_ID()');
$row = $query->row_array();
$lastid= $row['LAST_INSERT_ID()'];
die($lastid);
它输出最后插入的id

我在用户id上有一个自动增量


为什么$this->db->insert\u id不起作用?

我已经检查过了,效果很好。请像这样试试

public function addNewAdmin($data) {

        $result = $this->db->insert("admins", $data);
        $lastid=$this->db->insert_id();        
        echo $lastid;exit;        
}

根据我在评论中给你的链接:-

1.从第一个链接开始,您可能没有主键自动递增列。因此,您可以使用:-

$this->db->affected_rows()
但这不会给出最后一个插入的id,它会告诉您有多少行由于插入查询而受到影响

2.在第二个链接中,给出了与您在第二次尝试中尝试的完全相同的解决方案,该解决方案对您有效,但没有解释为什么会发生这种行为

3.基于:

MySQLi在提交事务预期行为时重置insert id。当它没有事务时,我认为由于一个bug,PHP版本之间的行为有所不同。尝试在事务中包装它,方法是调用trans\u begin,然后调用insert,然后调用insert\u id,然后调用commit

但我认为这是一个非常高端的概念,即使我不知道如何执行,所以没有评论

4.从该链接: 它又在说:

a、 如果没有自动增量列,它将返回0

b、 没有mysqli连接/链接id会返回false,在php中它实际上是0

最后,尝试一下:-

$this->db->insert("user",$data);
$lastid=$this->db->insert_id();
echo $lastid;die;

$this->db->insert\u id返回插入的最后一行的id,确保已将id列设置为自动递增的主键。用这个,

$this->db->insert('table',$array(''=>,));
$id=$this->db->insert_id();`enter code here`
return $id;

我认为没有返回id,因为您的自动增量值不仅仅是普通id,而是用户id。。这是因为我试过了

$this->db->insert("user",$data);
$lastid=$this->db->insert_id();
die($lastid);

对于一个有ID的表,它可以工作,但当我在同一个项目中尝试使用一个有item_ID的表时,该表不工作

虽然我有自动递增功能,但它仍然不工作$这个->db->insert_id以前工作过,不过我想我会使用第二个选项$query=$this->db->query'selectlast_insert_id'$行=$query->row\u数组$lastid=$row['LAST_INSERT_ID'];死$lastid;仍然想知道为什么$this->db->insert\u id不起作用。那么$this->db->infected\u行或者我建议的最后一行呢?@Vlanzyvinz我也很想知道,不是因为它不起作用,因为没有对此给出解释。我将尝试$this->db->infected\u行我刚刚尝试了db->trans start db->trans complete$此->数据库->传输启动$此->数据库->插入凭证菜单,$data$lastid=$this->db->insert\u id$此->数据库->传输完成;死$lastid;还是不明白id@Vlanzyvinz最后一个呢。echo$lastid;死亡有必要把这些东西包装在函数中吗?我不是在批评,只是好奇,因为我对模型类中应该包含的函数知之甚少。因为CI是MVC。然后在控制器上,我们可以通过$this->model\u name->addNewAdmin$data调用模型;不,没有必要在函数中写入它。正如@vlanzyvinz所写,它用于模型中,这就是为什么我在函数中写入它,以便直接在控制器中访问该函数。
$this->db->insert("user",$data);
$lastid=$this->db->insert_id();
die($lastid);