【问题标题】:Duplicate entry '' for key 2键 2 的重复条目“”
【发布时间】:2013-05-08 05:47:00
【问题描述】:

这是给我“键 2 的重复条目”错误的 php 代码...

<?php

$host = "localhost"; 
$user = "admin"; 
$pass = "123";
$connection = mysql_connect($host,$user,$pass) or die (mysql_errno().": ".mysql_error()."<BR>");

    $userid=  mysql_real_escape_string($_POST['userid']);
$latitude=  mysql_real_escape_string($_POST['latitude']);
$longitude=  mysql_real_escape_string($_POST['longitude']);
//$time=  mysql_real_escape_string($_POST['time']);


$db_select=mysql_select_db("new");
if(!$db_select){
    die(mysql_error());
    echo "error";
}

$query= "INSERT INTO location(Userid, Latitude, Longitude )
VALUES ('{$userid}', '{$latitude}', '{$longitude}'); " ;

if($medo=mysql_query($query)){
    header("localhost/filename");
    exit;
}else{
    echo"<p> Error</p>";
    die(mysql_error());
}

我认为我的代码没有问题。请帮忙。

【问题讨论】:

  • Please, don't use mysql_* functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解prepared statements,并使用PDOMySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial.
  • 问题是,我没有足够的时间来学习甚至更改我的代码。这个问题有解决方案吗?也许是捷径?
  • 这个错误意味着,你有 PRIMARY KEY 重复的 ID 列,或重复的列,这是 UNIQUE 索引的一部分。检查表是否有重复项。考虑使用INSERT INGNOREREPLACE
  • 恐怕..你需要学习,这是正确的解决方案......而pdo和mysqli_*就像mysql_*一样简单
  • 通常用户 ID 应该始终是唯一的,所以我假设这是您的 SQL 表中的唯一列。在这种情况下,您要插入的变量之一已经在您的数据库表中(并且该变量的列具有唯一键)。假设用户 ID 是冲突的,可能会尝试输入不同的 ID,或者不允许用户输入他们的 ID 并让该列自动增加。

标签: php mysql duplicates


【解决方案1】:

如果你已经存在的话,我想你会想要更新,对你的 MySQL 请求使用这个语法:

$query= "INSERT INTO location (Userid, Latitude, Longitude )
VALUES ('{$userid}', '{$latitude}', '{$longitude}') 
ON DUPLICATE KEY UPDATE Latitude='{$latitude}', Longitude='{$longitude}';";

这样当您的用户已经存在时,它将使用新坐标进行更新

【讨论】:

    【解决方案2】:

    如果 user_id 是主键,让它自动递增,不要从前端发布这个值。

    如果它不是主键,那么它肯定是唯一键。所以在插入之前先检查记录是否已经存在。

    【讨论】:

      【解决方案3】:

      如果您想要每个用户的唯一记录,您必须检查用户记录是否已经存在,然后使用 UPDATE 而不是 INSERT。

      如果每个用户有很多记录,只需从“Userid”列中删除 PRIMARY KEY 或 UNIQUE KEY。

      【讨论】:

      • 如果你不知道“它是如何工作的”或“它为什么会这样工作”,就像“毁了你的数据库”一样。投反对票。
      • 我想你只是误解了我的意思。如果需要为每个用户存储多个坐标,则必须删除“主键”。例如:[user1: 23,83],[user1: 83,28]
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2013-08-07
      • 2011-07-13
      • 2021-11-27
      • 2017-02-17
      • 2014-12-30
      相关资源
      最近更新 更多