繁体   English   中英

尝试使用MYSQL和php将记录添加到具有强制唯一标识符的表中

[英]Trying to add records to a table with MYSQL and php, with a forced unique identifier

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

我遇到的脚本问题是它没有维护唯一的标识符(在Joomla中为“ id”,在Wordpress中为“ ID”)。 根据我的理解,这使得将所有Joomla永久链接重定向到新的(而且显然是不同的)Wordpress永久链接的处理变得更加复杂(更多工作)。 如果WP中的ID与Joomla中的ID相同,则htaccess中的一些基本重写规则将足以执行重定向。

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

我正在修改的脚本可在以下位置找到: http ://wordpress.org/extend/plugins/joomla-to-wordpress-migrator/有问题的文件称为: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 ... SET (与INSERT INTO ... VALUE相对)

我面临的挑战是:数组不包含ID,因此我在其中添加了ID。

进行此更改后,当我运行脚本时,它将显示出来(在Wordpress UI端),可以正常运行,但是即使它说成功了,也不会插入任何记录。

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

我想知道是否需要使用INSERT INTO ... VALUE命令而不是INSERT INTO ... SET

我打算对此进行测试,但老实说,我不是程序员,而是随其发展而来。 因此,我不知道如何重写PHP以隐含VALUE命令所需的结构来代替SET

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

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

wordpress支持论坛上对此问题进行一些讨论。 一位用户(spiff06)非常乐意帮助我解决问题。 我们一直忙于获取代码以使用强制标识符插入新记录,然后我使用了我们所谓的“ messy”选项(这是我上面提到的方法...设置所需数量的表)空白记录)。

即使我已经在自己的网站上使用了这种“混乱”方法,但我仍希望使该过程对于Joomla 1.5.x上的其他用户而言是干净的,他们正在切换到WP,而不是升级到较新的Joomla版本(这是一个很大的过程,有很多人像我一样只是在跳WP)。

非常感谢...

乔纳森

您可以尝试以下方法:

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

  2. 导入值。 这样,您就可以将任何值毫无限制地输入字段ID。

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

我从来没有发现这样做的真正自动化/脚本化方式。 我最终做了一个解决方法:

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

变通方法用所需数量的记录预填充WP数据库中的wp_posts表(在Joomla中查看以查看有多少记录)。 我有398条记录,因此我在wp_posts中添加了398条记录。

怎么样? 我通过将emtpy wp_posts表导出到.csv文件来完成此操作。 然后,我在Excel中打开了它(Numbers或OpenOffice也可以)。 在电子表格应用程序中,很容易在ID列中自动填充1至398。

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

然后,我将Mambo / Joomla的1.5.4版本运行到WordPress迁移器,可以从WordPress中安装。

最终结果?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM