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

标签 php mysql email pdo

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

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

错误

假设我们的列表中有两个 friend 电子邮件。

  1. georgeMARK@email.com
  2. 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 的所有实例,这太糟糕了。我在我的应用程序中多次使用相同的方法,我知道这会导致我的相同错误也出现在其他地方。

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

最佳答案

快速肮脏方法是在所有联系人字段前加上一个分号,这样条目如下:

;georgeMARK@email.com;MARK@email.com;

那么可以这样替换:

$emailToDelete = ";$emailToDelete;"
... REPLACE(`Contacts`, :email, ';') ...

更好的方法是以更合适的格式(如 JSON)存储联系人数据。

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

关于php - 更改 PHP 中的 REPLACE SQL 函数以删除联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652978/

相关文章:

php - MySQLi 显示 PHP 代码

vb.net - 在 .NET 中调用 SmtpClient.Dispose() 是否安全?

php - Yii Joined table 但不是所有选定的数据都被检索

php - 我正在尝试将数组转换为 XML,但未能 100% 正确

PHP 产品类别选择下拉列表,允许用户将类别定义为主类别或子类别

php - 我想显示数据库中不同表中存在的网站成员

mysql - 从同一个 SQL 表中的不同值中查找百分比差异?

MySQL 连接所有列

c - 在 Linux 机器上获取用户的默认电子邮件

email - Magento 事务电子邮件配置 : best practice