我有一个插入查询(活动记录样式),用于将表单字段插入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时没有得到任何结果答案 0 :(得分:238)
试试这个
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();
答案 1 :(得分:61)
这里不需要交易,这应该足够了:
function add_post($post_data) {
$this->db->insert('posts',$post_data);
return $this->db->insert_id();
}
答案 2 :(得分:29)
$id = $this->db->insert_id();
答案 3 :(得分:8)
$这 - > DB-> INSERT_ID()
执行数据库插入时的插入ID号。
因此,您可以使用以下内容:
function checkEmail(inputvalue){
var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
return pattern.test(inputvalue);
}
checkEmail('rte@co') // false
checkEmail('rte@co.com') // true
答案 4 :(得分:0)
因为您是通过数据插入发起事务的,所以, 第一次检查事务是否完成。开始交易后,应根据交易状态进行提交或回滚;
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();
}
}``
在上面,即使您获得了时间戳,我们也已将数据提交到成功的事务中
答案 5 :(得分:0)
只需完成本主题: 如果您使用主键设置表格并自动递增,则可以省略手动递增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']
]);
答案 6 :(得分:0)
**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;
}
答案 7 :(得分:0)
使用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
答案 8 :(得分:0)
值得一提的是,其他答案与 Codeigniter 版本 3 相关。版本 4 中的答案(找到 https://codeigniter.com/user_guide/database/helpers.html)是使用 $this->db->insertID()
答案 9 :(得分:-1)
您必须使用$lastId = $this->db->insert_id();