SQL - IF EXISTS UPDATE ELSE INSERT INTO(SQL - IF

2019-07-21 12:00发布

我正在试图做的是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);

但他们没有工作,我究竟做错了什么?

任何帮助是极大的赞赏!

Answer 1:

  1. 创建UNIQUE约束你的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) 

您可以使用VALUES(COL_NAME)函数UPDATE子句中引用的列值从INSERT的INSERT部分...对重复密钥更新- dev.mysql.com

  1. 请注意,我已经使用参数占位符在字符串中的位置,作为一个真正应该使用参数化的语句来抵御SQL注入攻击 。


文章来源: SQL - IF EXISTS UPDATE ELSE INSERT INTO