$sql = "INSERT INTO `diver` (`firstname`, `lastname`, `registrated`)
SELECT '$fname', '$lname', now()
WHERE NOT EXISTS (SELECT firstname, lastname FROM `diver` WHERE diver.firstname = '$fname' AND diver.lastname = '$lname')";
我收到此错误:
您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在#&; 39,WHERE NOT EXISTS附近使用正确的语法(SELECT firstname,lastname FROM diver
WHERE diver.firstname =' at line 3
代码在localhost中运行得非常好,但是在我的在线数据库中却没有。有没有其他解决方案可以做同样的事情?
答案 0 :(得分:1)
学习使用参数。在MySQL中,您需要from
才能使用where
。一种方法是使用from dual
(从Oracle采用)。
我倾向于选择:
INSERT INTO `diver` (`firstname`, `lastname`, `registrated`)
SELECT fname, lname, now()
FROM (SELECT ? as fname, ? as lname) x
WHERE NOT EXISTS (SELECT 1
FROM `diver` d
WHERE d.firstname = x.fname AND
d.lastname = x.lname
);
我假设您打算not exists
,因为插入具有重复值的行通常不是您想要做的。
实际上,这不是最好的方法。而是在名称列上创建唯一的索引/约束:
create unique index unq_diver_firstname_lastname on diver(firstname, lastname);
insert into `diver` (`firstname`, `lastname`, `registrated`)
values (?, ?, now())
on duplicate key update firstname = values(firstname);
插入副本时,这不起作用。
另请注意,名称不一定是唯一的,因此检查名称的唯一性通常不是一个好主意。