Php 如何解决此错误:SQLSTATE[23000]:完整性约束冲突:1062重复条目';30';对于键';初级';

Php 如何解决此错误:SQLSTATE[23000]:完整性约束冲突:1062重复条目';30';对于键';初级';,php,html,mysql,sql,pdo,Php,Html,Mysql,Sql,Pdo,在使用-lastInsertId()将表单中的值插入mysql-表项\u image-时,我遇到了一个问题 这是我的db item table id(auto increment,Primary key) item_name (varchar) item_description (tinytext) item_price(varchar) item_date(date) item_image itemId(PRIMARY KEY), small_image(varchar), big_imag

在使用-
lastInsertId()将表单中的值插入mysql-
表项\u image
-时,我遇到了一个问题

这是我的db

item table
id(auto increment,Primary key)
item_name (varchar)
item_description (tinytext)
item_price(varchar)
item_date(date)

item_image
itemId(PRIMARY KEY),
small_image(varchar),
big_image(varchar)
这是我的表格

<form method="post" action="?<?php echo $action;?>">
<p>
<label for="item_name">Name of Article :</label>
<input type="text" name="item_name" id="item_name" value="" />
</p>

<p>
<label for="item_description">Short Description:</label>
<textarea id="item_description" name="item_description" rows="3" cols="40" value=""></textarea>
 </p>

<p>
<label for="">Item small Image :</label>
<input type="text" id="small_image" name="addimages[]" value="" />
</p>

<p>
<label for="">Item small Image:</label>
<input type="text" id="big_image" name="addimages[]" value="" />
</p>

<div>
<input type="submit" name="submit" id="submit" value="<?php echo $button;?>" />
</div>
我遇到的问题是:在items表中插入了所有值,但对于item_image表…我遇到了以下错误:

SQLSTATE[23000]:完整性约束冲突:密钥“PRIMARY”的1062重复条目“30”

我正在搜索,但找不到问题..我的foreach循环似乎是正确的

我正在尝试做的是:将
lastInsertId()
值和
addimages数组值插入我的项目图像表中


sombody可以帮忙吗..谢谢。

此消息表示您正在使用相同的列组合进行另一次插入。若要插入记录,请将新记录插入表中。不同的记录


并尝试在itemId上添加自动增量。

该消息表示您正在使用相同的列组合进行另一次插入。若要插入记录,请将新记录插入表中。不同的记录


并尝试在itemId上设置自动递增。

您已经为
item\u image
表中的
itemId
列设置了唯一索引,但根据您提供的信息,您的项目可以有多个图像,因此
item\u image
表中的多个
itemId
列可以具有相同的值(参考“父”图像的id),并且不应在那里使用唯一索引。对该列使用普通索引。

您已经为
item\u image
表中的
itemId
列设置了唯一索引,但是根据您提供的信息,您的项可以有多个图像,因此
item\u image
表中的多个
itemId
列可以有e相同的值(参考“父”图像的id),并且不应在其中使用唯一索引。对该列使用普通索引。

您的项\u image.itemId是主键,基本上是唯一索引。您需要的是外键(索引值)将图像链接到相应的项目实体。您应该深入研究关系数据库模型和约束,这将使您更好地理解如何创建一个良好的数据库结构(google上已经有足够的内容)。您的项目\ u image.itemId是一个主键,基本上是一个唯一的索引。您需要的是一个外键(索引值)将图像链接到相应的项目实体。您应该深入研究关系数据库模型和约束,这将使您更好地理解如何创建良好的数据库结构(google上有足够的信息).您是说我应该将ItemId设置为自动递增?如果
ItemId
引用了items表中的id(看起来是这样的),则否。自动递增列自动成为主键,这也将拒绝具有多个具有相同值的列。images表中的
itemId
引用图像所属的项,因此只需使用常规索引(不是唯一的,不是主键,只是“index”,以便MySQL可以更快地查找它们)您是说我应该将ItemId设置为自动递增?如果
ItemId
引用了items表中的id(看起来是这样的),则否。自动递增列自动成为主键,这也将拒绝具有多个具有相同值的列。images表中的
itemId
引用图像所属的项,因此只需使用常规索引(不是唯一的,不是主键,只是“index”,以便MySQL可以更快地查找它们)
if (isset($_GET['addform'])) {
$item_name = trim($_POST['item_name']);
$item_description = trim($_POST['item_description']);
$item_price = trim($_POST['item_price']);

 try {

$sql = 'INSERT INTO items SET 
        item_name = :item_name,
        item_description = :item_description,
        item_price = :item_price,
        item_date= CURDATE()';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':item_name', $item_name);
$stmt->bindValue(':item_description', $item_description);
$stmt->bindValue(':item_price', $item_price);
$stmt->execute();
 } 
  catch (PDOException $e) {
   echo "Something went wrong".$e->getMessage();
 }

$itemId = $pdo->lastInsertId(); 

  if (isset($_POST['addimages'])) {

    $add_images = $_POST['addimages'];

    try {
      $sql ='INSERT INTO item_image SET
              itemId = :itemId,
             small_image = :small_image,
             big_image = :big_image';
      $stmt = $pdo->prepare($sql);
         foreach ($add_images as $add_image) {
           $stmt->bindValue(':itemId', $itemId);
           $stmt->bindValue(':small_image', $add_image[0]);
           $stmt->bindValue(':big_image', $add_image[1]);
           $stmt->execute();
         }
    }   
      catch (PDOException $e) {
      echo "Sth got wrong with the query".$e->getMessage();
    }
  }