是否有一种方法可以检查我的PHP文件,在使用时将用户添加到我的数据库。即
John使用我的程序,当他遇到错误时,它会获取他的信息并将其发送到我的数据库,数据库中有他的姓名,电子邮件和计算机操作系统。
现在这就是我想要的,但是如果john再次启动程序,它会发送另一个,重复的行副本到我的数据库,这是无用的,并且阻塞了它,充满了无用的信息。
当前正在使用的代码:
$connect = mysql_connect('host','user','pass') or die("Error");
mysql_select_db('DB') or die("Error");
$Name = $_GET['name'];
$Email = $_GET['email'];
$OS = $_GET['os'];
$add ="INSERT INTO UserDB(Name, Email, OS, ) VALUES ('$Name', '$Email', '$OS')";
mysql_query($add,$connect);
mysql_close($connect);
您希望在数据库中使用唯一约束或适当的主键。然后,当您的代码试图插入重复行时,数据库将引发错误,您可以处理它。如果你想用新行替换旧行,你可能需要一个upsert。
这里有一篇关于选择主键的好文章。
无需创建大量额外的逻辑,就可以在数据库上创建UNIQUE键关联。由于电子邮件地址是唯一的,您可以这样做:
运行此SQL
添加唯一键,并禁止在电子邮件地址上多次插入。
ALTER TABLE `UserDB` ADD UNIQUE(`Email`);
更改PHP代码查询
如果没有插入,使用此查询进行更新。
if(mysql_insert_id() < 1) {
$add = sprintf(
"UPDATE `UserDB` SET `Name`='%s', `Email`='%s', `OS`='%s' WHERE `Email`='%s'",
$Name,
$Email,
$OS,
$Email
);
}
请切换到mysql或PDO,你很容易受到SQL注入!!
您永远无法获得数据库中某一行的精确副本。必须有唯一的id。这通常是一个为每个新行自动递增的数字。如果在您的表中出现这种情况,您必须简单地询问数据库当前用户是新用户还是现有用户。比如:
$query = "SELECT id FROM UserDB WHERE Name='$name' AND Email = '$email'";
$result = mysql_query($query);
if(mysql_num_rows($result) == 0)
//Add user
else
//Update user? Or something else