尝试使用MYSQL和php向表中添加记录,并使用强制唯一标识符
我正在尝试修改一个脚本,该脚本用于将文章记录从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行是:尝试使用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
$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您可以尝试以下方法:
您可以尝试以下操作:
我从来没有找到一种真正自动化/脚本化的方法来做这件事。我最后做了一个变通办法: 现在,我已经通过预先填充表格的方式“混乱”地导入了我所有的帖子 工作轮法 在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