如何使用带有会话的 insert_id() 插入其他表?

Posted

技术标签:

【中文标题】如何使用带有会话的 insert_id() 插入其他表?【英文标题】:How to use the insert_id() with session to insert into other table? 【发布时间】:2013-07-25 11:27:02 【问题描述】:

我整天都在为此苦苦挣扎。

如何将第一次插入时的insert_id() 使用到模型中的另一个函数中? 我尝试了会话,但无法正常工作。

我什么都试过了。

我的第一个插入看起来像这样:

    $aanbdata = array(
        'Aanbieding' => $this->input->post('aanbiedingnaam'),
        'Tekst' => $this->input->post('aanbiedingomschrijving'),
        'Prijs' => $this->input->post('aanbiedingprijs'),
        'Conditie' => $this->input->post('aanbiedingconditie'),
        'prijssoort' => $this->input->post('prijsopties'),
    );      
    $this->db->insert('Aanbiedingen', $aanbdata);

我试过了:

    session_start();
    $this->session->set_userdata('aanbiedingid', $this->db->insert_id());

但我的 id 在自动递增时落后 1,所以当我插入一行 id=4 时,会话是 id=3。

为什么?

编辑:

我的模型函数:

public function addaanbieding()

    $aanbdata = array(
        'Aanbieding' => $this->input->post('aanbiedingnaam'),
        'Tekst' => $this->input->post('aanbiedingomschrijving'),
        'Prijs' => $this->input->post('aanbiedingprijs'),
        'Conditie' => $this->input->post('aanbiedingconditie'),
        'prijssoort' => $this->input->post('prijsopties'),
    );      
    $this->db->insert('Aanbiedingen', $aanbdata);

    $this->addimages($image_data, $this->db->insert_id());

    $catid = $this->input->post('categorie');   
    $bedrijfid = $this->session->userdata('idbedrijven');

    $bedrijfaanb = array(
    'idbedrijven' => $bedrijfid,
    'idaanbiedingen' => $this->session->userdata('aanbiedingid'),
    'idaanbiedingcat' => $catid
    );

    $this->db->insert('bedrijfaanbiedingen', $bedrijfaanb);



public function addimages($image_data)

    $insert_data = array(
        'fotonaam' => $image_data['file_name']
    );
    $this->db->insert('fotoaanbiedingen', $insert_data);


    $fotoid = $this->db->insert_id();
    $aanbiedingid = $this->session->userdata('aanbiedingid'); //this does nto work

    $to_aanbiedingfotos = array(
        'idaanbiedingen' => $aanbiedingid,
        'idfotoaanbiedingen' => $fotoid
    );

    $this->db->insert('aanbiedingfotos', $to_aanbiedingfotos);

【问题讨论】:

为什么要为此使用会话? 因为我不知道另一种方式。也许是因为我需要做点别的事情,我整天都在忙这个。 可能重复***.com/questions/1985967/… @AnkitPokhrel 阅读我的问题。 【参考方案1】:

你可以这样做:

控制器:

$aanbdata['Aanbieding'] = $this->input->post('aanbiedingnaam');
$aanbdata['Tekst'] = $this->input->post('aanbiedingomschrijving');
$aanbdata['Prijs'] = $this->input->post('aanbiedingprijs');
$aanbdata['Conditie'] = $this->input->post('aanbiedingconditie');
$aanbdata['prijssoort'] = $this->input->post('prijsopties');

$last_id = $this->model_name->add($aanbdata); //change model_name with your model name
$this->session->set_userdata('name', $last_id);

型号:

function add($data) 
   $this->db->insert('Aanbiedingen', $data);
   return $this->db->insert_id();

【讨论】:

我已经添加了我的模型,你可以看看。 伙计,你写了大量的代码。但有人认为我看到的是: $this->addimages($image_data, $this->db->insert_id());有两个参数,公共函数 addimages($image_data) 只有一个。 我昨天为此苦苦挣扎,我现在通过将 id 返回给控制器来修复它。谢谢:) 新的一天更适合编码。感谢您选择答案和投票。快乐编码【参考方案2】:

将 insert_id 作为参数提供给您的模型函数。

说真的,这是一个非常愚蠢的答案。但是我真的不知道如何帮助你。 是什么阻止您在插入后直接调用“其他模型函数”?

喜欢

$aanbdata = array(
    'Aanbieding' => $this->input->post('aanbiedingnaam'),
    'Tekst' => $this->input->post('aanbiedingomschrijving'),
    'Prijs' => $this->input->post('aanbiedingprijs'),
    'Conditie' => $this->input->post('aanbiedingconditie'),
    'prijssoort' => $this->input->post('prijsopties'),
);      
$this->db->insert('Aanbiedingen', $aanbdata);
$this->the_other_model->the_other_function($this->db->insert_id());

【讨论】:

在其他模型函数中如何调用insert_id?,因为还有一个insert语句 您为什么要这样做?另一个模型与该模型的插入无关,那么为什么要在另一个模型中调用“insert_id()”呢?在 insert() 之后立即调用它。 不是其他型号。我的模型中的另一个功能。我会将两者都添加到我的问题中,以便清楚。 看看我的问题 :) 这真的不会改变任何事情。没有理由在另一个函数中调用“insert_id()”。如果 'insert_id()' 作为参数,只需给它返回值。

以上是关于如何使用带有会话的 insert_id() 插入其他表?的主要内容,如果未能解决你的问题,请参考以下文章

mysqli 最后插入 id

python插入记录后取得主键id的方法(cursor.lastrowid和conn.insert_id())

通过 insert_id() 插入数据库表的最后一个 id,而不是从 Codeigniter 中的模型返回到控制器文件

如何在 php 中使用 prepare 语句获取 insert_id? [复制]

CodeIgniter、Ajax... 如何使用 insert_id()

在使用准备好的语句执行插入查询后获取自动增量 ID