Php MySQL-如果不存在,则插入值,或者更新并返回id

Php MySQL-如果不存在,则插入值,或者更新并返回id,php,mysql,Php,Mysql,我有一张看起来像f.ex的桌子。像这样: id(主键,自动增量)|水果|颜色 我想为水果和颜色插入值,如果水果值不存在,否则我只想更新颜色并获取插入或更新行的id F.ex。如果我与以下人员发生冲突: 1234苹果红 并且希望将苹果的颜色更新为绿色,而不知道已经有一行包含苹果。我使用以下代码: $sqli = get_db(); $q1 = "INSERT INTO table (fruit, color) VALUES ('apple', 'green') ON DUPLICATE KEY U

我有一张看起来像f.ex的桌子。像这样:

id(主键,自动增量)|水果|颜色

我想为水果和颜色插入值,如果水果值不存在,否则我只想更新颜色并获取插入或更新行的id

F.ex。如果我与以下人员发生冲突:

1234苹果红

并且希望将苹果的颜色更新为绿色,而不知道已经有一行包含苹果。我使用以下代码:

$sqli = get_db();
$q1 = "INSERT INTO table (fruit, color) VALUES ('apple', 'green') ON DUPLICATE KEY UPDATE color='green', id=LAST_INSERT_ID(id)";
$r1 = $sqli->query($q1);
$insertedOrUpdatedID = $sqli->insert_id();
我想将现有行更新为:

1234苹果绿

并获取$insertedorupdateId中的id(1234)

我想我需要以任何方式标记水果栏。当我执行此代码时,它总是创建一个新行(1235|apple | green),而不更新现有行或返回编辑的id

解决方案:

将“水果”的类型从text更改为varchar(100),并将其键设置为UNIQUE可以解决此问题。此外,将代码的最后一行更改为:

$insertedOrUpdatedID = mysqli_insert_id( $sqli );
为了得到正确的身份证


快乐编码

如果要按水果名称更新,请将水果创建为唯一键

请尝试此查询

替换为表_名称(水果、颜色)值('apple','green')


在表中插入重复键上的名称(水果、颜色)值('apple','green')更新颜色='green

您是否查看了替换而不是插入
UNIQUE
fruit
属性的约束可能会阻止插入重复行。@RiggsFolly谢谢,但不幸的是,当我执行REPLACE INTO table(fruit,color)VALUES('apple','green')时,它仍然会创建第二行row@soonoo谢谢但是,当我试图将fruit更改为UNIQUE时,MySQL会说“BLOB/TEXT列‘fruit’在没有键长度的键规范中使用”,当我将长度设置为100@soonoo**编辑:-将其更改为varchar(100),然后再更改为UNIQUE,这样做很有效!谢谢**谢谢还要感谢@soonoo!!诀窍是将“水果”类型从text更改为varchar(100),然后使其唯一!现在插入查询工作了!欢迎朋友。。。这是我的荣幸:)