0

有没有一种方法可以签入我的 PHP 文件,在使用时将用户添加到我的数据库中。IE

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);
4

3 回答 3

4

您需要数据库中的唯一约束或适当的主键。然后,当您的代码尝试插入重复行时,数据库将引发错误,您可以处理它。如果你想用新行替换旧行,你可能需要一个upsert

这是一篇关于选择主键的好文章

于 2013-01-04T13:24:00.043 回答
0

无需创建大量额外逻辑,您就可以在数据库上创建唯一键关联。由于电子邮件地址是唯一的,您可以这样做:

运行此 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
    );
}

请切换到 mysqli 或 PDO,你很容易受到 SQL 注入!

于 2013-01-04T13:27:54.407 回答
-1

您永远无法准确复制数据库中的行。必须始终有一个唯一的 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
于 2013-01-04T13:24:38.297 回答