php – MySQL – 如果不存在则插入值或更新并返回id

我有一张看起来像f.ex.像这样:

id(primaryKey,auto_increment)|水果|颜色

我想插入水果和颜色的值,如果水果值不存在,否则我想只更新颜色并返回插入或更新的行的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 |苹果|绿色

并获取$insertedOrUpdatedID中的id(1234).

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

解:

将’fruit’的类型从text更改为varchar(100)并将其KEY设置为UNIQUE可以解决问题.此外,将代码的最后一行更改为:

$insertedOrUpdatedID = mysqli_insert_id( $sqli );

为了获得正确的ID.

快乐的编码!

最佳答案 如果您想通过水果名称更新,请创建如UNIQUE KEY的水果

试试这个查询

REPLACE INTO table_name(水果,颜色)VALUES(‘apple’,’green’);

要么

INSERT INTO table_name(水果,颜色)VALUES(‘apple’,’green’)ON DUPLICATE KEY UPDATE color =’green;

点赞