【问题标题】:how to fill field foreign key from field auto_increment如何从字段 auto_increment 填充字段外键
【发布时间】:2017-03-20 18:48:54
【问题描述】:

我有第一个表用户的 3 个表,$data 我有 $id,它是 auto_increment,它就像 mysql 上的自动填充,但问题是第二个表,第三个 $id 是第一个表的外键,当我插入数据,第二个表中的 $id 和第三个表是空的,我如何从第二个表和第三个表中获取填充 $id 的 $id?,这里的代码:

if($this->form_validation->run() == TRUE){
            echo 'Harap Tunggu...';
            //data akun
            $email = $this->input->post('email');
            $pass = md5($this->input->post('password'));

            //data pribadi
            $nama = $this->input->post('nama_lengkap');
            $alamat = $this->input->post('alamat');
            $tgl_lhr = $this->input->post('date');
            $no_telp = $this->input->post('no_telp');

            //data pendidikan
            $tingkat_pendidikan = $this->input->post('tingkat_pendidikan');
            $nama_institusi = $this->input->post('namainstitusi');
            $jurusan = $this->input->post('jurusan');
            $no_induk = $this->input->post('nomor_induk');
            $nilai = $this->input->post('nilai');
            $no_telpon_institusi = $this->input->post('no_institusi');

            $salt = $this->salt();

            $pass = $this->makePassword($this->input->post('password'), $salt);


            $data = array(
                'id' => $id,
                'email' => $email,
                'password' => $pass,
                'salt' => $salt
            );

            $data2 = array(
                'nama_lengkap' => $nama,
                'tanggal_lahir' => $tgl_lhr,
                'alamat' => $alamat,
                'no_telpon' => $no_telp,
                'id' => $id
                );

            $data3 = array(
                'tingkat_pendidikan' => $tingkat_pendidikan,
                'nama_institusi' => $nama_institusi,
                'jurusan' => $jurusan,
                'no_induk' => $no_induk,
                'nilai' => $nilai,
                'no_telpon_institusi' => $no_telpon_institusi,
                'id' => $id
                );


            $this->db->insert('user',$data);
            $id = $this->db->insert_id();
            $data2['id'] = $data3['id'] = $id;
            $this->db->insert('data_pribadi',$data2);
            $this->db->insert('pendidikan',$data3);

            $this->session->set_flashdata("success","your account has been created");
            $this->session->set_flashdata('id', $id);
            redirect('upload_foto/index','refresh');

        }

【问题讨论】:

  • id 和外键应该是 2 列。 Cz foreign key 可以有相同的值 1 或更多
  • 您可以在第一次插入后获取最后一个插入ID,您可以将其用于另一个表,要获取最后一个ID,请查看w3schools.com/php/php_mysql_insert_lastid.asp

标签: php mysql database codeigniter mysqli


【解决方案1】:
  1. 不知道$this是什么意思,但是PDO和mysqli实现了lastInsertId函数
  2. 您应该调用第一次插入,然后将最后插入的 id 存储到变量中。
  3. lastInsertId 方法的返回值分配给$data2['id'] 和$data3['id']。

代码:

 <?php
       if($this->form_validation->run() == TRUE){
            echo 'Harap Tunggu...';
            //data akun
            $email = $this->input->post('email');
            $pass = md5($this->input->post('password'));

            //data pribadi
            $nama = $this->input->post('nama_lengkap');
            $alamat = $this->input->post('alamat');
            $tgl_lhr = $this->input->post('date');
            $no_telp = $this->input->post('no_telp');

            //data pendidikan
            $tingkat_pendidikan = $this->input->post('tingkat_pendidikan');
            $nama_institusi = $this->input->post('namainstitusi');
            $jurusan = $this->input->post('jurusan');
            $no_induk = $this->input->post('nomor_induk');
            $nilai = $this->input->post('nilai');
            $no_telpon_institusi = $this->input->post('no_institusi');

            $salt = $this->salt();

            $pass = $this->makePassword($this->input->post('password'), $salt);


            $data = array(
                'id' => $id,
                'email' => $email,
                'password' => $pass,
                'salt' => $salt
            );

            $data2 = array(
                'nama_lengkap' => $nama,
                'tanggal_lahir' => $tgl_lhr,
                'alamat' => $alamat,
                'no_telpon' => $no_telp,
                'id' => $id // Undefined
                );

            $data3 = array(
                'tingkat_pendidikan' => $tingkat_pendidikan,
                'nama_institusi' => $nama_institusi,
                'jurusan' => $jurusan,
                'no_induk' => $no_induk,
                'nilai' => $nilai,
                'no_telpon_institusi' => $no_telpon_institusi,
                'id' => $id // Undefined
                );


            $this->db->insert('user',$data);
            $id = $this->db->insert_id();
            $data2['id'] = $data3['id'] = $id;
            $this->db->insert('data_pribadi',$data2);
            $this->db->insert('pendidikan',$data3);

            $this->session->set_flashdata("success","your account has been created");
            $this->session->set_flashdata('id', $id);
            redirect('upload_foto/index','refresh');

        }

【讨论】:

  • 1.我从codeigniter 2创建这个。你能举个例子吗? 3.如何从lastInsertId返回值?
  • 好的,在codeigniter中你可以使用$this->db->insert_id();我更新了我的答案。
  • 它的工作谢谢,但我有 1 个问题,我如何闪存数据形式 $id ?我尝试这样 $this->session->set_flashdata('id', $id);但我得到了错误
  • 这是一个不同的问题,提供更多信息/代码,就像你在这个问题上所做的那样,我会帮助你。
  • ok,我从问题中编辑了我的代码,并添加了更多内容。你能看到吗?
【解决方案2】:

为了获取最后插入的 id,您可以使用以下代码。 致电$this-&gt;db-&gt;lastInsertId();check this link

【讨论】:

  • 我收到此错误“消息:调用未定义的方法 CI_DB_mysqli_driver::lastInsertId()”
  • 你正在使用 mysqli,所以下面的代码会有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2015-05-26
  • 2012-01-22
  • 2021-09-04
  • 2021-07-17
  • 1970-01-01
相关资源
最近更新 更多