[英]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.