Php 我在项目中创建了“删除用户帐户”按钮,但无法删除已删除用户留给其他用户的邮件

Php 我在项目中创建了“删除用户帐户”按钮,但无法删除已删除用户留给其他用户的邮件,php,codeigniter,Php,Codeigniter,当用户在其帐户中并单击“delete account”(删除帐户)时,应删除该用户以及他们为用户留下的消息,并停止向其他用户显示为好友。我有两个这样的工作,但如果其他用户登录,仍然会显示消息。我已经创建了一个功能,用户可以使用它来删除来自朋友的消息,我已经尝试将此功能实现到一个新功能中,以便它可以删除来自特定朋友的消息。这是原始的deleteMsg,它将删除所有字段(message_id、from、to、message),因此消息将在消息数据库中删除。此功能出现在“我的邮件”模型中: funct

当用户在其帐户中并单击“delete account”(删除帐户)时,应删除该用户以及他们为用户留下的消息,并停止向其他用户显示为好友。我有两个这样的工作,但如果其他用户登录,仍然会显示消息。我已经创建了一个功能,用户可以使用它来删除来自朋友的消息,我已经尝试将此功能实现到一个新功能中,以便它可以删除来自特定朋友的消息。这是原始的deleteMsg,它将删除所有字段(message_id、from、to、message),因此消息将在消息数据库中删除。此功能出现在“我的邮件”模型中:

function deleteMsg($message_id)
 {

$this->db->where(array('message_id' => $message_id));
$this->db->delete('messages');

 }
下面是我试图实现的功能,这样当调用delete帐户时,它将删除这个现在已删除的用户在其他用户主页上留下的所有消息。它也出现在我的模型中:

  function deleteAccountMsg($message_id, $from)
  {
$delAcctMsg = $this->db->select('*')->from('messages')->where('message_id', $message_id)->where('from', $from);
$delete = $this->db->delete('messages', $delAcctMsg);

    }
最后,这里是控制器中的DeleteUserAccount函数,它应该获取与用户相关的所有内容并将其删除:

 function Deleteuseraccount()
 {
    parent::__construct();

    $this->load->model("membership");
    $this->load->model("friends");
    $this->load->model("messages");


    $username = $this->session->userdata('username');
    $this->membership->deleteUser($username);
    $this->friends->deleteMemberFriend($username, $friendname);
    $this->messages-> deleteAccountMsg($message_id, $from);// this is the function I'm calling that isn't deleting the associate messages from the deleted user
    $this->session->sess_destroy();
    redirect('start');
 } 
}
您一次只删除(通过选择)一条消息。您需要删除邮件id限制

$delAcctMsg = $this->db->select('*')->from('messages')->where('from', $from);
$delete = $this->db->delete('messages', $delAcctMsg);

一些注释

1) 先编写伪SQL

你可以通过用PHP把它拼出来,来解决你想做什么

SELECT *
FROM messages
WHERE from=$from
然后,这将为您的SQL模型提供所需的链

2) 当您只需要选择消息id时,为什么选择*

3) 当您可以直接删除时,
为什么要选择
?节省网络流量、处理和mySQL调用

$delete = $this->db->delete('messages')->where('from', $from);
4) 如果你想调整前一个函数,你可以把它分成几位。差不多

// (Untested - try it first on test data)
$this->db->where('from', $from);
if ($message_id) {
    $this->db->where('message_id', $message_id);
}
$this->db->delete('messages');
$this->db->select('*')->from('messages')->where('from',$username)->或_where('to',$username)


这实际上解决了这个问题

嗨,Robbie,谢谢你。我在deleteCountMsg函数中尝试了这一行:$delete=$this->db->delete('messages')->where('message\u id',$message\u id)->where('from',$from);但后来我犯了两个错误。第一个是遇到php错误:严重性:警告消息:非法偏移类型。我还遇到了一个数据库错误:不允许删除,除非它们包含“where”或“like”子句。我刚才不是在sql delete语句中包含了2个where吗?再次感谢-我现在删除了一个用户的帐户,它最终删除了所有消息。虽然现在有了一些功能,我也很欣赏,但如何让deleteAccountMsg只删除属于被删除帐户的人的用户名的邮件呢?如果你需要进一步解释,请让我知道..那就分解成最后一个例子吧。这里有足够多的例子:(比CI文档更容易)。是-您的问题[message_id AND from]中有两个WHERE,当您试图从一个用户删除所有记录时,这两个WHERE会导致问题,因为您只需要WHERE[from]中的一个好的,谢谢-我试着使用from,但同样的东西-我在想我是否可以引用特定的朋友名,并从sql语句中引用我朋友数据库中的朋友…是的,有。根据问题中的代码,我已经给了你答案。如果不是这样(例如,“from”实际上是一个用户id,而不是一个名字等等),那么如果你不能从中找到答案,那么你需要透露更多信息。抱歉-我只能根据您的问题提供帮助。请注意(如上所述),在“删除”之前进行“选择”既低效又不可取。首先,你打了两个电话,而一个可以。第二,尽管听起来不太可能,用户可能会在选择和删除之间添加一个条目-然后该记录将成为孤立记录。好的,谢谢您指出这一点-您建议这样做吗?$this->db->delete('*')->from('profileimages')->其中('user',$username);