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();
}
}