更改PHP中的REPLACE SQL函数以删除联系人

更改PHP中的REPLACE SQL函数以删除联系人,php,mysql,email,pdo,Php,Mysql,Email,Pdo,我最近清理了我的web应用程序的代码。我的web应用程序是一个简单的社交网络,包含添加、删除等过程。我有一个php文件,当用户想要从他的朋友列表中删除联系人时,我会调用它 我在我的应用程序中发现了一个奇怪的错误,我还没有估计我写它的时间 虫子 假设我们的列表中有两封朋友电子邮件 georgeMARK@email.com MARK@email.com 联系人电子邮件存储在MYSQL DB列中,名称为Contacts,每封电子邮件都用分号(;)符号分隔。因此,我们的示例列将如下所示(取决于最后添加的

我最近清理了我的web应用程序的代码。我的web应用程序是一个简单的社交网络,包含添加、删除等过程。我有一个php文件,当用户想要从他的朋友列表中删除联系人时,我会调用它

我在我的应用程序中发现了一个奇怪的错误,我还没有估计我写它的时间

虫子 假设我们的列表中有两封朋友电子邮件

  • georgeMARK@email.com
  • MARK@email.com
  • 联系人电子邮件存储在MYSQL DB列中,名称为
    Contacts
    ,每封电子邮件都用分号(
    )符号分隔。因此,我们的示例列将如下所示(取决于最后添加的用户,反之亦然):

    因此,假设我们的用户想要从他的联系人中删除
    标记。他按下按钮,然后。。。两封电子邮件都不见了

    在我的PHPMyAdmin面板中,我发现专栏中剩下的是:

    george
    
    问题出在我的PDO SQL语句中,我使用它从我的列中删除帐户

    $STH = $DHB->prepare("UPDATE `Users` SET `Contacts` = REPLACE(`Contacts`, :email, '') WHERE `UserEmail` = :my_email");
    
    REPLACE
    功能只会替换
    :email
    的所有实例,这太糟糕了。我在我的应用程序中多次使用相同的方法,我知道这将导致我的应用程序在其他地方也出现相同的错误

    我的问题是,如何在不影响其他“实例”的情况下删除用户的电子邮件?我必须改变我的观点吗?我需要怎么做?

    结构 也许可以创建这样的结构:

    ;georgeMARK@email.com;MARK@email.com;
    
    表用户

    id | Name | Email
    -----------------
    1  | John | john@example.com
    2  | Jane | jane@example2.com
    
    餐桌友谊

    User1_id | User2_id
    -------------------
    1        | 2
    

    选择用户 选择朋友 删除友谊 结构 也许可以创建这样的结构:

    ;georgeMARK@email.com;MARK@email.com;
    
    表用户

    id | Name | Email
    -----------------
    1  | John | john@example.com
    2  | Jane | jane@example2.com
    
    餐桌友谊

    User1_id | User2_id
    -------------------
    1        | 2
    

    选择用户 选择朋友 删除友谊 快速脏方法是在“所有联系人”字段前加一个分号,以便如下所示的条目:

    ;georgeMARK@email.com;MARK@email.com;
    
    然后,您可以通过以下方式进行更换:

    $emailToDelete = ";$emailToDelete;"
    ... REPLACE(`Contacts`, :email, ';') ...
    
    更好的方法是以更合适的格式(如JSON)存储联系人数据

    最好的解决方案是创建一个关系表并删除与要删除的联系人相关的所有条目。

    快速脏方法是在“所有联系人”字段前加一个分号,以便如下所示的条目:

    ;georgeMARK@email.com;MARK@email.com;
    
    然后,您可以通过以下方式进行更换:

    $emailToDelete = ";$emailToDelete;"
    ... REPLACE(`Contacts`, :email, ';') ...
    
    更好的方法是以更合适的格式(如JSON)存储联系人数据



    最好的解决方案是创建一个关系表,并删除与要删除的联系人相关的所有条目。

    为什么不为每个电子邮件地址创建一个单独的表,其中包含行?@Ties很好的一点,但我必须在某种程度上将用户与电子邮件连接起来,以便最终得到相同的结果。如果您有单独的表,则可以使用
    DELETE WHERE email=:email
    ,因为每封电子邮件都在另一行中,所以它只会在实际情况下删除match@Ties是的,我知道,但假设我必须阅读用户的联系人。我需要另一个列来连接每个用户,如果一个人有很多朋友,我需要多少列?为什么不为每个电子邮件地址创建一个单独的表,其中包含行?@Ties很好,但我必须在某种程度上连接用户和电子邮件,所以最终我会得到相同的结果。如果你有单独的您可以使用
    DELETE WHERE email=:email
    ,因为每封电子邮件都在另一行中,所以它只会在实际情况下删除match@Ties是的,我知道,但假设我必须阅读用户的联系人。我需要另一个专栏,让用户彼此联系,如果一个人有很多朋友,我需要多少专栏?电子邮件域都是一样的。没关系,他们可以是你想要的任何东西like@GeorgeGkas你明白我的例子吗?我不是数据库管理员。(至少还没有)如果你能从网上提供你的结构的例子,那么你会帮我很多。你有访问数据库的权限吗?你能创建表格吗?电子邮件域都是一样的。那没关系,它们可以是你想要的任何东西like@GeorgeGkas你明白我的例子吗?我不是数据库管理员。(至少还没有)如果你能从网上提供你的结构的例子,那么你会帮我很多。你有访问数据库的权限吗?你能创建表格吗?我感谢你的懒惰!!!!:)-我将在即将到来的修订版中更新我的数据库结构。我感谢你的懒惰!!!!:)-我将在即将到来的修订版中更新我的db结构。