数据库
首页 > 数据库> > mysql – Drupal数据库API查询 – 如果存在则为row.update,否则为row.insert

mysql – Drupal数据库API查询 – 如果存在则为row.update,否则为row.insert

作者:互联网

我一直在尝试在drupal中运行一个查询,如果它们已经存在则会更新条目,如果没有,则插入一个新条目.代码现在看起来像这样:

db_query("IF EXISTS (SELECT %d FROM {uc_posten_packages.pid})
UPDATE {uc_posten_packages} SET title = '%s', label = '%s', cost = '%d', length = '%d', width ='%d', height = '%d', weight = '%d'  WHERE pid = %d
ELSE
INSERT INTO {uc_posten_packages} VALUES ('%d', '%s', '%s', '%d', '%d', '%d', '%d', '%d')",$id, $title, $label, $rate, $length, $width, $height, $weight, $id, $id, $title, $label, $rate, $length, $width, $height, $weight);

我不明白为什么该查询会引发错误.错误中的所有数字都是正确的

...near 'IF EXISTS (SELECT 1 FROM uc_posten_packages.pid) UPDATE uc_posten_packages ' at line 1 query:
IF EXISTS (SELECT 1 FROM uc_posten_packages.pid) UPDATE uc_posten_packages SET title = 'vfbv', label = 'bbv', cost = '22', length = '232', width ='22', height = '22', weight = '22' WHERE pid = 1 ELSE INSERT INTO uc_posten_packages VALUES ('1', 'vfbv', 'bbv', '22', '232', '22', '22', '22')

这个查询是否有效和/或是否有更好的方法在drupal中处理这个问题?

解决方法:

你正在寻找的是被称为“upsert”(更新否则插入),并且有一个drupal函数:db_merge.好在这里写:http://drupal.org/node/310085

drupal_write_record()不会自动执行“upsert”.它总是根据您传入的内容插入或更新,但不能同时插入或更新.

标签:mysql,drupal,upsert
来源: https://codeday.me/bug/20190716/1482994.html