INSERT导致DUPLICATE ENTRY为'0'为KEY PRIMARY

时间:2015-09-01 10:26:04

标签: php mysql database

我使用一个简单的PHP脚本将数据插入数据库,但它失败了。如果没有显示单个错误,查询就不会成功,这就是我无法找出问题的原因。有些专家在这里帮助我。

echo $name." ".$email." ".$pass." ".$phone." ".$area." ".$specialization." ".$city." ".$latitude." ".$longitude;

回声的结果是正常的 - 没有任何空元素。

$query = mysqli_query($conn, "INSERT INTO users (name, email, pass, phone, area, specialization, hospital, city, latitude, longitude) 
                         VALUES ('$name', '$email', '$pass', '$phone', '$area', '$specialization', '$hospital', '$city', '$latitude', '$longitude') ");

if ($query) {
                echo "Status: Registeration Successful!";

                // creating directory for user and storing dummy profile picture
                //mkdir('../profiles/'.$email_trim, 0777);
                //$result_copy = copy("img/dp.jpg.jpg", "../profiles/".$email_trim."/dp.jpg.jpg");
} else {
    echo "Status: Err";
}

始终打印“状态:错误”。我不知道为什么。

P.S我已经仔细检查过数据库,字段标签很好。

更新1:

我添加了

die(mysqli_error($conn));

声明并且它说“关键主要的重复输入'0'。

问题和解决方案:

问题是我有一个'id'字段,它是表的主键但是没有设置为AUTO_INCREMENT。因此,每当我尝试插入新记录时,我实际上是插入具有重复PK的条目,这是问题。我将其更改为AUTO_INCREMENT,它解决了问题。

7 个答案:

答案 0 :(得分:3)

您似乎尝试插入PK = 0的新元素,但是已经有了这个键的记录! 你桌子的主键是什么?您是否使用了插入语句中未显示的“id”字段?这个字段是AUTO_INCREMENT吗?

答案 1 :(得分:2)

查看“用户”表的结构会很有帮助。

狂野猜测:看起来你可能已经定义了一个“id”列(或其他任何名称),它是主键,默认值为“0”,但它不是自动增量。这样你可以插入1行,它将获得“0”作为“id”列的值,但你不能插入另一行,因为它也会尝试使用默认值“0”,这不可能发生,因为主键必须是唯一的

如果是这种情况,请修改用户表并确保主键列也是“自动增量”。

答案 2 :(得分:0)

<?php
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
?>

答案 3 :(得分:0)

请在其他

中添加以下提及的代码,以检查错误
echo mysqli_errno($conn) . '----' . mysqli_error($conn);

答案 4 :(得分:-1)

$query = mysqli_query($conn, "INSERT INTO `users` (`name`, `email`, `pass`, `phone`, `area`, `specialization`, `hospital`, `city`, `latitude`, `longitude`) 
                     VALUES ('$name', '$email', '$pass', '$phone', '$area', '$specialization', '$hospital', '$city', '$latitude', '$longitude') ");

使用`勾选可能是因为您的字段中有一些保留字。

答案 5 :(得分:-1)

$query = mysqli_query($conn, "INSERT INTO `users` (`name`, `email`, `pass`, `phone`, `area`, `specialization`, `hospital`, `city`, `latitude`, `longitude`) 
                 VALUES ('$name', '$email', '$pass', '$phone', '$area', '$specialization', '$hospital', '$city', '$latitude', '$longitude') ") or die(mysqli_error());

答案 6 :(得分:-2)

我认为你的括号加倍,不要在查询中加入$ conn ..

$query = "INSERT INTO users (name, email, pass, phone, area, specialization, hospital, city, latitude, longitude) 
                         VALUES ('$name', '$email', '$pass', '$phone', '$area', '$specialization', '$hospital', '$city', '$latitude', '$longitude')";
mysqli_query($query, $conn);

像这样的东西。我希望这有帮助