Mysql 如何避免插入到wordpress中的重复

Mysql 如何避免插入到wordpress中的重复,mysql,wordpress,Mysql,Wordpress,我试图将记录插入wordpress表中,但问题是,它插入了重复的记录 这是我的sql查询 $qv = $conn->query("INSERT INTO wp_posts (post_title, post_content, post_name, post_date, post_date_gmt, post_author) VALUES('$title[$i]', '$description[$i]', '$url[$i]', '$date[$i]', '$postdate[$i]', '

我试图将记录插入wordpress表中,但问题是,它插入了重复的记录

这是我的sql查询

$qv = $conn->query("INSERT INTO wp_posts (post_title, post_content, post_name, post_date, post_date_gmt, post_author) VALUES('$title[$i]', '$description[$i]', '$url[$i]', '$date[$i]', '$postdate[$i]', '$author[$i]') ON DUPLICATE KEY UPDATE post_name = post_name");
我不想插入任何重复记录,如何解决此问题?

在列上创建唯一键,并使用insert ignore而不是insert,如下所示

  ("INSERT ignore INTO wp_posts (post_title, post_content, post_name, post_date, post_date_gmt, post_author)
 VALUES('$title[$i]', '$description[$i]', '$url[$i]', '$date[$i]', '$postdate[$i]', '$author[$i]'));

wp_posts将id作为自动增量主键,并且您的插入查询没有id,因此您的on-duplicate约束将不起作用。 如果您想通过文章标题拥有唯一的记录,则必须在其上创建唯一索引。如有必要,可以将唯一约束应用于多个列的组合。 另外,insert ignore将重新生成重复记录,而不会对其进行更新。您必须在应用程序中处理它

在MySQL中添加唯一约束的查询

ALTER TABLE wp_posts ADD CONSTRAINT unique_post UNIQUE (post_title,post_name);
不允许使用标题重复文章


我无法在wordpress列中选择unique键,我的意思是它不可单击,似乎从wordpress中禁用了选择OK我正在尝试添加unique索引,但它给我一个错误,这是我正在使用的ALTER IGNORE TABLE wp_posts add unique post_title,post_name查询;另外,不要在循环内执行查询。在循环内构建查询,然后执行它。还有关于准备好的语句,但先让它工作这是我面临的错误,1170-在键规范中使用的BLOB/TEXT列“post_title”没有键长度修改现有列将破坏wordpresse的内置功能。修订,自动保存,因为帖子标题和帖子名称可能不唯一当你检查wp_帖子时,你会发现有很多重复的帖子名称和帖子标题,由wordpress创建…wordpress将无法使用唯一的keyALTER表插入这些列TABLE\u name ADD CONSTRAINT somename UNIQUE columnname这是syntaxALTER表wp\u posts ADD CONSTRAINT tvp UNIQUE post\u title不起作用1170-在没有键长度的键规范中使用的BLOB/TEXT列“post\u title”,因为我是使用wordpress?MySQL只能索引BLOB或文本列的前N个字符。因此,您必须将列类型更改为varchar。让我们。
function disallow_posts_with_same_title($messages) {
    global $post;
    global $wpdb ;
    $title = $post->post_title;
    $post_id = $post->ID ;
    $wtitlequery = "SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND post_title = '{$title}' AND ID != {$post_id} " ;

    $wresults = $wpdb->get_results( $wtitlequery) ;

    if ( $wresults ) {
        $error_message = 'This title is already used. Please choose another';
        add_settings_error('post_has_links', '', $error_message, 'error');
        settings_errors( 'post_has_links' );
        $post->post_status = 'draft';
        wp_update_post($post);
        return;
    }
    return $messages;

}
add_action('post_updated_messages', 'disallow_posts_with_same_title');