我有一张看起来像f.ex.的表。像这样:
id(primaryKey,auto_increment)|水果|颜色
如果 fruit 值不存在,我想插入 fruit 和 color 的值,否则我想更新颜色并返回插入或更新的行的
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)。
我想我需要以任何方式标记 fruit 列。当我执行此代码时,它总是创建一个新行(123 5 | apple | green)而不更新现有代码或返回已编辑的 id 。< / p>
SOLUTION:
更改水果的类型&#39;从 text 到 varchar(100)并将其KEY设置为UNIQUE可以解决问题。此外,将代码的最后一行更改为:
$insertedOrUpdatedID = mysqli_insert_id( $sqli );
以获得正确的ID。
快乐的编码!
答案 0 :(得分:2)
如果您想按水果名称更新,请创建水果为 UNIQUE KEY
尝试此查询
REPLACE INTO table_name (fruit,color) VALUES ('apple','green');
或
INSERT INTO table_name (fruit,color) VALUES ('apple','green') ON DUPLICATE KEY UPDATE color = 'green;