簡體   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