【问题标题】:CodeIgniter - Delete data from multiple tableCodeIgniter - 从多个表中删除数据
【发布时间】:2017-10-29 09:05:06
【问题描述】:

我想从 3 个表中删除数据,我有表 user,pemohon,peserta,其中所有表都通过外键相互连接。

这个查询有效,我在mysql上试过

DELETE user,pemohon,peserta
FROM user,pemohon,peserta
WHERE user.id_user=pemohon.id_pemohon AND
pemohon.id_pemohon=peserta.id_peserta AND pemohon.id_pemohon=1

所以我像这样转换为 CodeIgniter

function delete_data($id)
{
    $this->db->where('pemohon.id_pemohon=user.id_user');
    $this->db->where('pemohon.id_pemohon=peserta.id_peserta');
    $this->db->where('pemohon.id_pemohon',$id);
    $this->db->delete('pemohon','user','peserta');
}

但是这段代码不起作用,你能修复我的代码吗?谢谢

【问题讨论】:

  • 很好。你也可以使用$this->db->query("Put your query here which you run in mysql")
  • @Nidhi 我试过了,$this->db->query("DELETE user,pemohon,peserta FROM user,pemohon,peserta WHERE user.id_user=pemohon.id_pemohon AND pemohon.id_pemohon =peserta.id_peserta 和 pemohon.id_pemohon=$id");但不工作
  • 但是你告诉上面this query work然后为什么它不起作用? .试试给静态ID pemohon.id_pemohon=1 并检查$id 是否有价值?
  • 如果我使用静态 id 是可行的,但是当我更改为参数 $id 时,id 没有给出值,但是当我打印 $id 它给出值时,我想我不能直接在$this->db->query中插入$id有没有其他办法?
  • 您是否尝试在delete_data 函数中打印$id??试试这个: $this->db->query("DELETE user,pemohon,peserta FROM user,pemohon,peserta WHERE user.id_user=pemohon.id_pemohon AND pemohon.id_pemohon=peserta.id_peserta AND pemohon.id_pemohon='".$ id."'");`

标签: php mysql codeigniter


【解决方案1】:

在删除功能中,您必须提供表格数组:

function delete_data($id)
{
    $this->db->where('pemohon.id_pemohon=user.id_user');
    $this->db->where('pemohon.id_pemohon=peserta.id_peserta');
    $this->db->where('pemohon.id_pemohon',$id);
    $this->db->delete(array('pemohon','user','peserta'));
}

如果不起作用,使用查询函数执行($id 转义):

function delete_data($id)
{
    $sql = "DELETE user,pemohon,peserta 
        FROM user,pemohon,peserta 
        WHERE user.id_user=pemohon.id_pemohon 
        AND pemohon.id_pemohon=peserta.id_peserta 
        AND pemohon.id_pemohon= ?";

    $this->db->query($sql, array($id));
}

并且没有转义 $id:

function delete_data($id)
{
    $this->db->query("DELETE user,pemohon,peserta 
        FROM user,pemohon,peserta 
        WHERE user.id_user=pemohon.id_pemohon 
        AND pemohon.id_pemohon=peserta.id_peserta 
        AND pemohon.id_pemohon= $id";
}

【讨论】:

  • 我看到codeigniter文档,这个查询不能用查询生成器执行,你可以使用$this->db->query()函数。
  • 对不起,我还是codeigniter的新手AND pemohon.id_pemohon= ?
  • $this->db->query()函数中第二个参数填充的问号,但为了防止sql注入而转义。
  • 如果我插入参数 $id 像这样 pemohon.id_pemohon=$id' it not give value and if i insert parameter $id 像这样 `pemohon.id_pemohon=array($id)' 它会给出值数组(7),但以数组格式。还有其他方法吗?
  • pemohon.id_pemohon=$id' 不能用值替换 $id,必须使用双引号开始和结束字符串。最后:pemohon.id_pemohon=$id"
【解决方案2】:

你可以试试这个过程

function delete_data($id)
{
   $this->db->delete('user', array('id_user' => $id)); 
   $this->db->delete('pemohon', array('id_pemohon' => $id));
   $this->db->delete('peserta', array('id_peserta' => $id));
}

【讨论】:

  • 如果我使用此代码,它只是从表 pemohon 中删除了数据,但没有在其他表中删除
【解决方案3】:

您可以将表名保存在一个数组中,然后将该数组作为参数传递给 delete()。您可以阅读完整示例:https://tutorialpace.com/CodeIgniter-Tutorials/CodeIgniter-Database-Delete

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-27
    • 2014-05-30
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多