我有一张看起来像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;