尝试使用MYSQL和php向表中添加记录,并使用强制唯一标识符

尝试使用MYSQL和php向表中添加记录,并使用强制唯一标识符,php,mysql,wordpress,joomla,insert,Php,Mysql,Wordpress,Joomla,Insert,我正在尝试修改一个脚本,该脚本用于将文章记录从Joomla(1.5.x)数据库导入Wordpress 3.2.1表中,以供发布。它是一个将内容从Joomla迁移到Wordpress的脚本 我对脚本的问题是它没有维护唯一标识符(Joomla中的“id”,Wordpress中的“id”)。根据我的理解,这使得将所有Joomla permalinks重定向到新的(显然是不同的)Wordpress permalinks变得更加复杂(工作量要大得多)。如果WP中的ID与Joomla中的ID相同,那么hta

我正在尝试修改一个脚本,该脚本用于将文章记录从Joomla(1.5.x)数据库导入Wordpress 3.2.1表中,以供发布。它是一个将内容从Joomla迁移到Wordpress的脚本

我对脚本的问题是它没有维护唯一标识符(Joomla中的“id”,Wordpress中的“id”)。根据我的理解,这使得将所有Joomla permalinks重定向到新的(显然是不同的)Wordpress permalinks变得更加复杂(工作量要大得多)。如果WP中的ID与Joomla中的ID相同,那么htaccess中的一些基本重写规则就足以执行重定向

因此,我想看看是否可以修改代码以强制生成ID,而不是在将记录插入表时按连续顺序生成ID

我正在修改的脚本在此处可用: 该文件名为:joomla2wp-mig.php

正在第1049和1081行附近创建阵列。 第1049行是:

 $wp_posts[] = array(
        'ID' => $R->id,  //I ADDED THIS IN
        'post_author' => $user_id,
        'post_category' => array($wp_cat_id),
        'post_content' => $post_content, 
        'post_date' => $R->created,
        'post_date_gmt' => $R->created,
        'post_modified' => $R->modified,
        'post_modified_gmt' => $R->modified,
        'post_title' => $R->title,
        'post_status' => 'publish',
        'comment_status' => 'open',
        'ping_status' => 'open',
        'post_name' => $R->alias,
        'tags_input' => $R->metakey, 
        'post_type' => 'post'
      );
在第1081行,它是:

 $array = array(
 "ID"        => $item['ID'],    //I ADDED THIS IN
 "post_author"       => $user_id,
 "post_parent"       => intval($wp_cat_id),
 "post_content"      => $item['post_content'],
 "post_date"         => $item['post_date'],
 "post_date_gmt"     => $item['post_date_gmt'],
 "post_modified"     => $item['post_modified'],
 "post_modified_gmt" => $item['post_modified_gmt'],
 "post_title"        => $item['post_title'],
 "post_status"       => $item['post_status'],
 "comment_status"    => $item['comment_status'],
 "ping_status"       => $item['ping_status'],
 "post_name"         => $item['post_name'],
 "post_type"         => $item['post_type']
      );
我已经对添加到每个数组代码位顶部的ID行进行了注释

INSERT命令是围绕第1097行执行的

INSERT命令的组合方式如下:

$insert_sql = "INSERT INTO " . $j2wp_wp_tb_prefix . "posts" . " set ";

$inserted = 0;
foreach ($array as $k => $v) 
{
  if($k AND $v) 
  {
    if($inserted > 0) 
      $insert_sql .= ",";
    $insert_sql .= " ".$k." = '".mysql_escape_string(str_replace("`","",$v))."'";
    ++$inserted;
  }
}    
$sql_query[] = $insert_sql;
}

它使用MYSQL函数INSERT INTO设置(与插入…值相反

我面临的挑战是: 数组没有包含ID,所以我在中添加了这个

进行了此更改后,当我运行脚本时,它会显示(在Wordpress UI端)运行良好,但不会插入任何记录,即使它说它成功了

我发现我可以通过设置一个新的wp_posts表,其中包含X个空白记录来解决这个问题。假设我要导入100篇文章,然后我会将100条记录放入表中,它们的ID为1到100。当我运行修改后的代码时,它将愉快地更新并填充这些现有记录。我不明白的是,当我强制将唯一标识符(ID)设置为我想要的值时,为什么它不会创建新记录

我想知道我是否需要使用插入到命令,而不是插入到设置

我本来打算测试一下,但老实说,我不是一个程序员,我只是随机应变。因此,我不知道如何重写PHP以实现VALUE命令所需的结构,而不是SET

如有任何帮助或建议,将不胜感激

我想我必须重写我上面提供的最后一段代码

在会议上对这件事有一些讨论。一位用户(spiff06)非常友好地帮助我解决了这个问题。我们在使用代码插入带有强制标识符的新记录时遇到了麻烦,我使用了我们称之为“混乱”的选项(这是我上面提到的方法……设置一个包含所需数量的空白记录的表)

尽管我在自己的网站上使用了这种“混乱”的方法,但我还是希望让这个过程对其他在Joomla 1.5.x上的用户干净地起作用,这些用户正在切换到WP,而不是升级到更新的Joomla版本(这是一个大过程,所以很多人只是跳转到WP,就像我一样)

非常感谢


Jonathan

您可以尝试以下方法:

  • 更改导入的mysql表的结构(post@wordpress). 更改id字段,使其不再是自动增量字段。让它只是一个整数字段

  • 导入值。通过这种方式,您可以在字段ID中输入任何值,而不受任何限制

  • 导入后,再次更改表的结构,以将ID字段再次设置为自动增量字段


  • 您可以尝试以下操作:

  • 更改导入的mysql表的结构(post@wordpress). 更改id字段,使其不再是自动增量字段。让它只是一个整数字段

  • 导入值。通过这种方式,您可以在字段ID中输入任何值,而不受任何限制

  • 导入后,再次更改表的结构,以将ID字段再次设置为自动增量字段


  • 我从来没有找到一种真正自动化/脚本化的方法来做这件事。我最后做了一个变通办法:

    现在,我已经通过预先填充表格的方式“混乱”地导入了我所有的帖子

    工作轮法 在wp数据库的wp_posts表中预填充所需数量的记录(查看Joomla中的记录数量)。我有398条记录,所以我在wp_的帖子中添加了398条记录

    怎么做?我是通过将emtpy wp_posts表导出到.csv文件来实现的。然后我在Excel中打开了它(数字,或者OpenOffice也可以)。在电子表格应用程序中,很容易在ID列中自动填充1到398

    然后我将.csv文件重新导入wp_帖子。这给了我一个wp_帖子,其中有398个记录行,ID字段中有1到398个记录行

    然后我在WordPress migrator上运行了Mambo/Joomla的1.5.4版,可以从WordPress内部安装

    最终结果


    所有帖子的ID都与Joomla原创文章的ID相同。

    我从未找到一种真正自动化/脚本化的方法。我最后做了一个变通办法:

    现在,我已经通过预先填充表格的方式“混乱”地导入了我所有的帖子

    工作轮法 在wp数据库的wp_posts表中预填充所需数量的记录(查看Joomla中的记录数量)。我有398条记录,所以我在wp_的帖子中添加了398条记录

    怎么做?我是通过将emtpy wp_posts表导出到.csv文件来实现的。然后我在Excel中打开了它(数字,或者OpenOffice也可以)。在电子表格应用程序中,很容易在ID列中自动填充1到398