添加到数据库字段而不是覆盖它(MySQL UPDATE函数)

时间:2016-02-05 12:09:47

标签: php mysql sql

我正在尝试更新我的数据库中的电子邮件字段...当我们的一位教师通过我们的系统发送邀请时,邀请的电子邮件会记录在我们的数据库中。

我希望老师能够发送电子邮件,然后如果他们忘记某人他们可以发送另一个邀请,然后数据库字段将保存例如两封电子邮件(原始邮件,然后是添加的邮件)。

enter image description here

以下是我将电子邮件存储在数据库中的代码...

$recipientemail = $_POST['recipientemail'];

// Stores the  (instance) in the instance database
include_once("$_SERVER[DOCUMENT_ROOT]/classes/includes/dbconnect.php");
$sql = ("UPDATE `database1`.`instances` SET `invitemail` = '{$recipientemail}' WHERE `instances`.`instance` = '{$instance}';"); 
$query = mysqli_query($dbConnect, $sql)or die(mysql_error());

每当我邀请新人时,此代码都会覆盖原始邀请的电子邮件...非常感谢您的考虑!

更新

解决方案是MySQL" concat()"功能。我可能更清楚的是我使用数值而不是字符串(电子邮件地址)。因此,如果我们在下面的答案中查看示例:

UPDATE table SET c=c+1 WHERE a=1;

这里以数学方式添加c和1,我想将电子邮件添加到我的数据库中,甚至用逗号分隔,所以我只是这样做...

UPDATE table SET c = concat(c, ',', 'new@email.com') WHERE a=1;

像CHARM一样工作! ;-)并感谢所有的答案!

1 个答案:

答案 0 :(得分:2)

尝试使用INSERT ... ON DUPLICATE KEY UPDATE

如果指定ON DUPLICATE KEY UPDATE,并且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值,则MySQL将执行旧行的UPDATE。

例如,如果列a声明为UNIQUE且包含值1,则以下两个语句具有类似的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

(对于a是自动增量列的表,效果不相同。对于自动增量列,INSERT语句会增加自动增量值,但UPDATE不会。 )

ON DUPLICATE KEY UPDATE子句可以包含多个列分配,以逗号分隔。

使用ON DUPLICATE KEY UPDATE,如果行作为新行插入,则每行的受影响行值为1;如果更新现有行,则每行受影响的行值为2。

希望这会有所帮助。