Php 在重复密钥更新时。。数据库密钥?

Php 在重复密钥更新时。。数据库密钥?,php,mysql,sql,insert,pdo,Php,Mysql,Sql,Insert,Pdo,我有一个表(id、名称、价格、菜单id) 我有一个页面,每个项目的名称和价格显示,用户可以编辑它 但当我提交时,它会创建新行 索引位于主键上。是不是应该在别的地方 我尝试了以下方法: INSERT INTO gerechten SET gerecht_naam = :naam, gerecht_prijs = :prijs, menu_id = :menuid ON DUPLICATE KEY UPDATE gerecht_naam = :naam, gerecht_prijs = :pr

我有一个表
(id、名称、价格、菜单id)

我有一个页面,每个项目的名称和价格显示,用户可以编辑它

但当我提交时,它会创建新行

索引位于主键上。是不是应该在别的地方

我尝试了以下方法:

INSERT INTO gerechten 
SET gerecht_naam = :naam, gerecht_prijs = :prijs, menu_id = :menuid 
ON DUPLICATE KEY 
UPDATE gerecht_naam = :naam, gerecht_prijs = :prijs
您需要在
gerech_naam
列和/或
gerech_prijs
中添加一个(可以有两列定义行的唯一性)

如果要对表实现这些唯一键,您必须意识到,您仍然会遇到问题,因为如果您更改名称或价格,它可能会
在数据库中插入
,因为您提供的数据在表中不存在。

您需要在
gerech_naam
列和/或
gerech_prijs
(可以有两列定义行的唯一性)


如果要在表中实现这些唯一键,您必须意识到仍然会有问题,因为如果更改名称或价格,可能会在数据库中插入
,因为您提供的数据在表中不存在。

只要有
唯一键
c,您的查询就会转换为更新表中出现皮疹。由您决定将此键放置在何处。例如,您的查询可能是:

INSERT INTO `gerechten` (`name`, `price`, `menu_id`) 
VALUES  (:name, :price, :menuid)
ON DUPLICATE KEY UPDATE 
    name = :name, 
    price = :price
例如,
name
menu\u id
上有一个唯一的索引。(我相信同一个名称可以有好几倍,只要它在不同的菜单中)


当然,如果有各种字段组合必须是唯一的,这是一种有问题的情况,您可能应该使用不同的方法,例如
select…lock
语句来检查正在编辑的值以前是否存在。

只要有
唯一键
崩溃,您的查询就会转换为更新n您的表。由您决定此键应放在何处。例如,您的查询可以是:

INSERT INTO `gerechten` (`name`, `price`, `menu_id`) 
VALUES  (:name, :price, :menuid)
ON DUPLICATE KEY UPDATE 
    name = :name, 
    price = :price
例如,
name
menu\u id
上有一个唯一的索引。(我相信同一个名称可以有好几倍,只要它在不同的菜单中)


当然,如果有各种字段组合必须是唯一的,这是一种有问题的情况,您可能应该使用不同的方法,例如
select…lock
语句来检查正在编辑的值以前是否存在。

这就是我所经历的!我如何确保用户可以更改数据并保存它?有什么想法吗?顺便说一句,谢谢如果你想同时更改名称和价格,你必须依赖另一个唯一的密钥(例如主键)。你的URL可以包含产品的ID(除非是新的),如果有ID,则从DB获取产品并更新其值,否则将创建一个新的。如果要添加唯一性,请在
gerech_naam
上放置一个唯一键。在创建时,要么检查名称是否已存在,要么通过尝试/捕获来检查update/insert语句是否引发异常。我想我明白了什么你的意思是..但很难将其转化为有效的东西。我会尝试更多..是否有其他方法进行if exists更新?这就是我的经验!我如何确保用户可以更改数据并保存它?有什么想法吗?顺便说一句,谢谢如果你想同时更改名称和价格,你必须在另一个唯一键(例如主键)上创建URL。您的URL可以包含产品的ID(除非它是新的),如果有ID,则从DB获取产品并更新其值,否则将创建一个新的。如果要添加唯一性,请在
gerech_naam
上放置一个唯一键。在创建时,要么检查名称是否已存在,要么通过尝试/捕获来检查update/insert语句是否引发异常。我想我明白了什么你的意思是..但很难将其转化为有效的东西。我将尝试更多..是否有其他方法来执行if exists更新?选择锁是我sql知识所无法理解的:(我不认为这样的事情会如此困难,它只是一个显示当前行的页面,用户可以编辑它们或添加新行,然后按save。然后你的查询可能会做得很完美,问题是我不理解列名,我不能告诉你。你能翻译列名吗?插入到gerechten集中name=:name,price=:price,menu id=:menuid ON DUPLICATE KEY UPDATE name=:name,price=:price我把主键放在'id'上,但是'name'和'price'上有一个唯一的索引…我认为这会起作用。:)但是不行。请参见我的编辑:唯一索引应该放在name和menuid上(删除旧索引)选择锁是我不了解的sql方法:(我不认为这样的事情会如此困难,它只是一个显示当前行的页面,用户可以编辑它们或添加新行,然后按save。然后你的查询可能会做得很完美,问题是我不理解列名,我不能告诉你。你能翻译列名吗?插入到gerechten集中name=:name,price=:price,menu id=:menuid ON DUPLICATE KEY UPDATE name=:name,price=:price我把主键放在'id'上,但是'name'和'price'上有一个唯一的索引…我认为这会起作用。:)但是不行。请参见我的编辑:唯一索引应该放在name和menuid上(删除旧索引)