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

时间:2016-08-23 06:01:59

标签: php mysql codeigniter mysqli

这是我的数据库配置: -

$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
    );

我使用此插入用户并输出die();

上的最后一个ID
$this->db->insert("user",$data);
$lastid=$this->db->insert_id();
die($lastid);`

输出0

但是当我使用时: -

$query = $this->db->query('SELECT LAST_INSERT_ID()');
$row = $query->row_array();
$lastid= $row['LAST_INSERT_ID()'];
die($lastid);

输出最后插入的ID ...

auto_increment

上有user_id

为什么$this->db->insert_id()无效?

4 个答案:

答案 0 :(得分:3)

我已经检查过它工作正常。请试试这个

public function addNewAdmin($data) {

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

答案 1 :(得分:3)

基于我给你的链接(在评论中): -

1.从第一个链接($this->db->insert_id(); returning 0 every time in codeigniter)您可能没有主键自动增加列。所以你可以使用: -

$this->db->affected_rows()

(但这不会给你最后一个插入的id,它会告诉你因插入查询而影响了多少行)

2.从第二个链接(https://kedyr.wordpress.com/2012/10/03/codeigniter-insert_id/)获得了与您在第二次尝试中尝试过的完全相同的解决方案(这对您有用),但没有解释为什么会出现这种情况。

3.基于: - http://forum.codeigniter.com/thread-61881.html

MySQLi在提交事务时重置插入ID(预期行为)。当它没有事务时,我认为由于一个错误,PHP版本之间的行为会有所不同。尝试将其包装在事务中,方法是调用trans_begin(),然后调用insert(),然后调用insert_id(),然后调用commit()。

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

4.从此链接: - https://github.com/bcit-ci/CodeIgniter/issues/591 它再次说: -

a。如果没有auto_increment列,则返回0

b。没有mysqli连接/链接ID会返回false(在php中实际为0)。

最后一次尝试: -

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

答案 2 :(得分:0)

$ this-> db-> insert_id()返回进行插入的最后一行的ID,确保已将ID列设置为自动递增的主键。使用这个;

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

答案 3 :(得分:0)

我认为没有返回ID,因为您的自动增量值不仅是纯ID,而且是user_id。这是因为我尝试了

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

使用具有ID的表并且可以正常工作,但是当我在同一项目中尝试使用具有item_id的表进行工作时