替换所有变量后,UPDATE命令看起来是这样的-在本例中,表前缀是wp_
(默认值),$group[\'1C_id\']
是9095b4cf-969d-11e9-a601-5cf3706390c8
, 和$found_id
(术语ID)为123
.
UPDATE `wp_termmeta`
SET `meta_key` = \'1C_id\', `meta_value` = \'9095b4cf-969d-11e9-a601-5cf3706390c8\'
WHERE `term_id` = 123
这意味着,
all 现有元数据,其中术语ID为
123
和
无论元键是什么,都将更改:首先,元键设置为1C_id
, 所以tax_position
meta已重命名为1C_id
.
其次,元值设置为9095b4cf-969d-11e9-a601-5cf3706390c8
, 成为tax_position
\'s新值。
这就解释了这一点:“这将删除tax\\u position meta并复制1C\\u id meta行;。
一、 e.Thetax_position
meta没有被删除,只是它的键和值被更改了,并且它们被设置为与现有的相同1C_id
元。
因此$wpdb->update()
没有实际删除或添加任何元数据。是您的查询没有正确执行。
那么也许你想做这样的事?
注意,我使用$wpdb->prepare()
为安全执行准备查询,您也应该这样做
// Select meta IDs by meta value.
$meta_ids = $wpdb->get_col( $wpdb->prepare( "
SELECT meta_id FROM $wpdb->termmeta
WHERE meta_value = %s
", $group[\'1C_id\'] ) );
// Then update all the above meta by the meta ID.
if ( ! empty( $meta_ids ) ) {
$wpdb->query( $wpdb->prepare( "
UPDATE $wpdb->termmeta
SET meta_key = \'1C_id\', meta_value = %s
WHERE meta_id IN (" . implode( \',\', $meta_ids ) . ")
", $group[\'1C_id\'] ) );
/* Or you can use update_metadata_by_mid():
foreach ( $meta_ids as $meta_id ) {
update_metadata_by_mid( \'term\', $meta_id, $group[\'1C_id\'], \'1C_id\' );
}
*/
}
但是,为什么要用相同的值更新元值($group[\'1C_id\']
) 选择元时使用?那是打字错误吗?(可能您只是想更新元密钥……?)