【发布时间】:2016-06-09 17:49:56
【问题描述】:
我最近清理了我的网络应用程序的代码。我的网络应用程序是一个简单的社交网络,带有添加、删除等程序。我有一个 php 文件,当用户想要从他的朋友列表中删除联系人时,我会调用它。
我在我的应用程序中发现了一个奇怪的错误,我没有估计我编写它的时间。
虫子
假设我们的列表中有两封朋友的电子邮件。
- georgeMARK@email.com
- MARK@email.com
联系人电子邮件存储在名为Contacts 的MYSQL DB 列中,每封电子邮件都用分号(;)分隔。所以我们示例的列将如下所示(取决于最后添加的用户,反之亦然):
georgeMARK@email.com;MARK@email.com;
假设我们的用户想要从他的联系人中删除MARK。他按下按钮,然后……两封电子邮件都不见了。!
查看我的 PHPMyAdmin 面板,我发现该列中剩下的内容是:
george
问题出在我用来从列中删除帐户的 PDO SQL 语句中。
$STH = $DHB->prepare("UPDATE `Users` SET `Contacts` = REPLACE(`Contacts`, :email, '') WHERE `UserEmail` = :my_email");
REPLACE 函数只是替换了:email 的所有实例,这太糟糕了。我在我的应用程序中多次使用相同的方法,我知道这会导致我的相同错误也出现在其他地方。
我的问题是如何在不影响其他“实例”的情况下删除用户的电子邮件?我必须改变我的观点吗?我需要怎么做?
【问题讨论】:
-
为什么不为每个电子邮件地址创建一个单独的表格?
-
@Ties 好点,但我必须再次将用户与电子邮件联系起来,所以最后我会得到相同的结果。
-
如果你有一个单独的表格,你可以使用
DELETE WHERE email=:email,因为每封电子邮件都在另一行,它只会在真正匹配时删除 -
@Ties 是的,我知道,但可以说我必须阅读用户的联系人。我需要另一列将用户彼此联系起来,如果一个人有很多朋友,我需要多少列?