我有一个足球注册网站。有时一个空字段被注册(我认为其中一个用户按下注册按钮两次,因为成功和空注册总是同时发生)。这很少发生,不是每次都发生。
我的代码是:
$sql="INSERT INTO events (event_name, registrant_name, date_registration) VALUES ('$event_number', '$username', NOW())";
$event_number
和NOW()
每次都会注册。 $username
有时是空的。我该如何解决这个问题?
答案 0 :(得分:2)
首先,您应该添加一个UNIQUE索引。除非你这样做,否则你可以拥有双重用户名。
您的PHP代码应该检查strlen($username) > 0
。或者,您可以在SQL触发器中执行此检查,但在您的情况下,可能没有理由这样做。
答案 1 :(得分:1)
您可以将NOT NULL
约束添加到user_name字段:
ALTER TABLE events MODIFY username varchar(255) NOT NULL;
或者签入PHP代码,user_name是否为空?
if(!empty($username)) {
$sql="INSERT INTO events (event_name, registrant_name, date_registration) VALUES ('$event_number', '$username', NOW())";
//run query
} else {
//handle error as you want
}
答案 2 :(得分:0)
我不同意建议将列声明为UNIQUE
或NOT NULL
的答案。嗯,我想,它没有受到伤害,但它们不是你看似设计糟糕的代码(你还没有发布)的答案。
在我看来,数据库解决方案是最后一道防线,如果有第一行定义则不需要 - 在将用户输入传递到数据库之前正确验证和清理用户输入。
使用PDO可以更轻松。
根据我上面的评论:
Smith;DROP ALL TABLES
怎么办? UNIQUE
和NOT NULL
都不会为您节省费用答案 3 :(得分:0)
你可以避免这个伎俩的问题:
INSERT INTO events (event_name, registrant_name, date_registration)
SELECT '$event_number', '$username', NOW()
FROM DUAL
WHERE length($username) > 0