SQL - IF EXISTS UPDATE ELSE INSERT INTO(SQL - IF EXISTS UPDATE ELSE INSERT INTO)
问题描述
我想要做的是在我的数据库中 INSERT 订阅者,但是 IF EXISTS 它应该 UPDATE 行,ELSE INSERT INTO 新行.
当然,我首先连接到数据库,然后从 GET 获取 $name、$email 和 $birthday网址字符串.
$con=mysqli_connect("localhost","---","---","---");//检查连接如果 (mysqli_connect_errno()){echo "连接 MySQL 失败:".mysqli_connect_error();}$name=$_GET['name'];$email=$_GET['email'];$birthday=$_GET['生日'];这有效,但只是添加了新行;
mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)值 ('$name', '$email', '$birthday')");mysqli_close($con);这是我尝试过的;
mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)值 '$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')更新 subs SET subs_name='$name', subs_birthday='$birthday' WHERE subs_email='$email'别的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')开始INSERT INTO subs (subs_name, subs_email, subs_birthday)值 ('$name', '$email', '$birthday')结尾");mysqli_close($con);但它们都不起作用,我做错了什么?
非常感谢任何帮助!
创建
UNIQUE约束 在您的subs_email列上,如果尚不存在:ALTER TABLE subs ADD UNIQUE (subs_email)使用
INSERT ... ON DUPLICATE KEY更新:INSERT INTO subs(subs_name, subs_email, subs_birthday)价值观(?,?,?)关于重复密钥更新subs_name = VALUES(subs_name),subs_birthday = VALUES(subs_birthday)
<块引用>
您可以在 UPDATE 子句中使用 VALUES(col_name) 函数来从 INSERT ... ON 的 INSERT 部分引用列值重复密钥更新 - dev.mysql.com
- 请注意,我使用参数占位符代替字符串文字,因为真的应该使用参数化语句来防御 SQL 注入攻击.
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.
Ofcourse I connect to the database first and GET the $name, $email and $birthday from the url string.
$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!
Create a
UNIQUEconstraint on yoursubs_emailcolumn, 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)
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
- Note that I have used parameter placeholders in the place of string literals, as one really should be using parameterised statements to defend against SQL injection attacks.
这篇关于SQL - IF EXISTS UPDATE ELSE INSERT INTO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:SQL - IF EXISTS UPDATE ELSE INSERT INTO
基础教程推荐
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- 带更新的 sqlite CTE 2022-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
