MySQL SQL - IF EXISTS UPDATE ELSE INSERT INTO
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15383852/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SQL - IF EXISTS UPDATE ELSE INSERT INTO
提问by Laurence Cooper
What I'm trying to do is INSERT
subscribers in my database, but IF EXISTS
it should UPDATE
the row, ELSE INSERT INTO
a new row.
我想要做的是INSERT
我的数据库中的订阅者,但IF EXISTS
它应该UPDATE
是一行,ELSE INSERT INTO
一个新行。
Ofcourse I connect to the database first and GET
the $name
, $email
and $birthday
from the url string.
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'];
This works, but just adds the new row;
这有效,但只是添加了新行;
mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES ('$name', '$email', '$birthday')");
mysqli_close($con);
Here's what I tried;
这是我尝试过的;
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);
and
和
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);
and
和
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);
But none of them work, what am I doing wrong?
但它们都不起作用,我做错了什么?
Any help is greatly appreciated!
任何帮助是极大的赞赏!
回答by eggyal
Create a
UNIQUE
constrainton yoursubs_email
column, if one does not already exist:ALTER TABLE subs ADD UNIQUE (subs_email)
Use
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)
在您的列上创建一个
UNIQUE
约束subs_email
(如果尚不存在):ALTER TABLE subs ADD UNIQUE (subs_email)
使用
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
您可以在 UPDATE 子句中使用 VALUES(col_name) 函数来引用来自 INSERT ... ON DUPLICATE KEY UPDATE 的 INSERT 部分的列值 - dev.mysql.com
- Note that I have used parameter placeholders in the place of string literals, as one reallyshould be using parameterised statements to defend against SQL injection attacks.
- 请注意,我使用参数占位符代替字符串文字,因为确实应该使用参数化语句来防御 SQL 注入攻击。