替换为导致“WHERE”处出现 MySQL 语法错误

我正在尝试使用 Replace Into 在 php 中创建一个用户计数脚本,但目前它似乎抛出一个我无法破译的 MySQL 错误。

$db->query("REPLACE INTO onlinenow (`time`,`ip`) VALUES ('$timestamp','$ip') WHERE ip = '$ip' ");

对我来说看起来是正确的,但是会导致错误

MySQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行 'WHERE ip = 'REDACTED'' 附近使用的正确语法

有人知道我哪里出错了吗?


喵喵时光机
浏览 88回答 1
1回答

慕慕森

简短回答:REPLACE INTO没有WHERE条款。长答案:它没有一个,因为它不需要一个 - 同一份文档说:如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,则在插入新行之前删除旧行这会自动发生。在你的情况下,我假设它将是 IP 列,应该对其进行PRIMARY KEY或UNIQUE约束。因此,您可以简单地从查询中删除 WHERE 子句,其余的就可以了。PS 我强烈建议您使用参数化查询和准备好的语句安全地在 PHP 中构建查询,而不是像现在一样使用简单的字符串连接。这将保护您免受 SQL 注入攻击,并大大降低其他意外语法错误的风险(例如,由于输入值中的引号和类似问题)。
打开App,查看更多内容
随时随地看视频慕课网APP