这是我的数据库配置: -
$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();
$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()
无效?
答案 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的表进行工作时