SQL-如果存在,则将更新插入其他

我想要做的就是INSERT在我的数据库的用户,但IF EXISTS它应该UPDATE排,ELSE INSERT INTO一个新行。


Ofcourse我连接到数据库第一和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);

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


任何帮助是极大的赞赏!


倚天杖
浏览 740回答 2
2回答

蛊毒传说

这是一篇有趣的文章,深入研究了我不知道的MySQL存储引擎API的一些非常底层的细节,因此感谢您使我快速入门。但是,我仍然希望尽可能清楚地表达我想要的逻辑,以帮助将来进行维护:只有当上述其他问题不相关并且造成重大性能影响REPLACE时,我才考虑切换到我真正打算的时候更新。请记住Knuth的格言:“ 过早的优化是万恶之源”。

MM们

我以为你的意思是该VALUES()条款。该VALUES()函数只是采用VALUES()您希望使用的子句中其值的列名称:它只是防止您重复自己的简写;您不必使用它。您可以根据需要直接在SET子句中使用函数,例如SET column = MYFUNCTION()。
打开App,查看更多内容
随时随地看视频慕课网APP