Wpdb替换返回1,其中需要删除和插入

时间:2020-04-28 作者:guardiancrescent

如果我输入一行,其中wpdb->replace使用一个已经存在的ID,它将被替换,并返回2。如果输入新行,则自动生成ID,插入新行并返回1。完美的

但是,如果输入的行与现有行完全匹配(我仍然希望删除并插入),则返回1(即使没有在数据库中插入新行)。为什么会这样?!

当一行插入到我的数据库中时,我正在尝试插入一篇文章。ie.)更换时返回1。但当我插入现有行的精确副本时,我也会收到新的帖子。

function xxxx_insert_entry( $post_id, $entry, $type, $entry_id = null ) {
    global $wpdb;

    $result = $wpdb->replace( 
        $wpdb->prefix . \'xxxx_entries\', 
        array( 
            \'ID\' => $entry_id, // PRIMARY KEY
            \'post_id\' => $post_id,
            \'entry\' => $entry, 
            \'type\' => $type 
        ) 
    );
    if ( $result === false ) return $result;

    $insert_id = $wpdb->insert_id;

    if ( 1 == $result ){ // INSERT OCCURRED
        $args = array(
            \'post_type\'     => \'entry\',
            \'post_title\'    => $entry,
            \'post_status\'   => \'publish\',
            \'meta_input\'    => array( \'entry_id\' => $insert_id ),
        );
        wp_insert_post( $args, true );

    } // ELSE REPLACE OCCURRED


    return $insert_id;
}

1 个回复
SO网友:guardiancrescent

我找到了here 那个

在出现重复密钥错误的情况下,存储引擎可能会将替换作为更新而不是删除加插入来执行,但语义是相同的。

它将返回1行受影响的内容,否则应该是删除和插入。

我现在正在检查是否为函数提供了entry\\u id。例如,如果我希望插入。

    if ( 1 == result || isset( $entry_id ) ) 

相关推荐

WPDB SQL查询从类别中选择

我编写SQL查询以获取状态为“instock”的项目ID,但不知道如何添加以仅从指定的产品类别中进行选择。我的代码:$results = $wpdb->get_col( \" SELECT p.ID FROM {$wpdb->prefix}posts as p INNER JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id WHERE p.post_type LIK