【发布时间】:2014-10-23 16:45:25
【问题描述】:
我对 SQL 和 PHP 非常陌生,但如果用户的 ip 不存在条目,我想将用户添加到列表中。如果条目确实存在,我只想更新他们的用户名。
我可以在“如果存在”语句之外执行这两个操作而不会打嗝,但它显然会产生很多重复。当我将其包装在“如果存在”语句中时,查询将停止执行任何操作。
我知道关于这个主题有几个问题,但我已尝试遵循大多数建议,如果有其他方法可以做到这一点,我很乐意考虑,谢谢。
<?php
$username = strval($_GET['username']);
$userip = $_SERVER['REMOTE_ADDR'];
$con = mysqli_connect("localhost", "ramendev_jctwood", "M1n1flam3", "ramendev_jctwood") or die ("Failed to connect to MySQL: " . mysqli_connect_error());
mysqli_query($con, "IF EXISTS (SELECT 1 FROM Users WHERE Userip='$userip')
UPDATE Users SET User='$username' WHERE Userip='$userip'
ELSE
INSERT INTO Users (User, Userip) VALUES ('$username', '$userip')
");
?>
【问题讨论】:
-
为什么不
insert ... on duplicate key update?你为什么不检查sql错误?mysqli_query(...) or die(mysqli_error())会告诉你到底出了什么问题。 -
尝试在 UPDATE 行的末尾和 INSERT 行的末尾添加一个分号。
-
许多 SQL DBMS 都有扩展来处理这个问题。我不确定哪个提供@Marc B 的
on duplicate key update,但SQLite 有insert or replace into,我敢肯定还有其他变体。 -
@john:这是 mysql,OP 显然正在使用它,因为他有
mysqli_query()
标签: javascript php html sql