[英]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)。
非常感谢...
乔纳森
您可以尝试以下方法:
更改导入的mysql表(post @ wordpress)的结构。 更改id字段,使其不再是自动递增字段。 让它只是一个整数字段。
导入值。 这样,您就可以将任何值毫无限制地输入字段ID。
再次更改导入后,表的结构将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.