gpt4 book ai didi

mysql - SQL - 如果存在更新 ELSE INSERT INTO

转载 作者:IT老高 更新时间:2023-10-28 12:52:49 25 4
gpt4 key购买 nike

我要做的是 INSERT 我的数据库中的订阅者,但是 IF EXISTS 它应该 UPDATE 行, ELSE INSERT INTO 一个新行。

当然,我首先连接到数据库,然后 GET $name$email$birthday 来自url 字符串。

$con=mysqli_connect("localhost","---","---","---");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$name=$_GET['name'];
$email=$_GET['email'];
$birthday=$_GET['birthday'];

这可行,但只是添加新行;

mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES ('$name', '$email', '$birthday')");

mysqli_close($con);

这是我尝试过的;

mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES '$name', '$email', '$birthday'
ON DUPLICATE KEY UPDATE subs_name = VALUES($name), subs_birthday = VALUES($birthday)");
mysqli_close($con);

mysqli_query($con,"IF EXISTS (SELECT * FROM subs WHERE subs_email='$email')
UPDATE subs SET subs_name='$name', subs_birthday='$birthday' WHERE subs_email='$email'
ELSE
INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES ('$name', '$email', '$birthday')");
mysqli_close($con);

mysqli_query($con,"IF NOT EXISTS(SELECT * FROM subs WHERE subs_email='$email')
Begin
INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES ('$name', '$email', '$birthday')
End");
mysqli_close($con);

但是它们都不起作用,我做错了什么?

非常感谢任何帮助!

最佳答案

  1. 创建 UNIQUE constraint在您的 subs_email 列中,如果尚不存在:

    ALTER TABLE subs ADD UNIQUE (subs_email)
  2. 使用INSERT ... ON DUPLICATE KEY UPDATE :

    INSERT INTO subs
    (subs_name, subs_email, subs_birthday)
    VALUES
    (?, ?, ?)
    ON DUPLICATE KEY UPDATE
    subs_name = VALUES(subs_name),
    subs_birthday = VALUES(subs_birthday)

You can use the VALUES(col_name) function in the UPDATE clause to refer to column values from the INSERT portion of the INSERT ... ON DUPLICATE KEY UPDATE - dev.mysql.com

  1. 请注意,我使用参数占位符代替字符串文字,因为一个 真的 应该使用参数化语句来 defend against SQL injection attacks .

关于mysql - SQL - 如果存在更新 ELSE INSERT INTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15383852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com