2015-10-28 35 views
0

我有一個XML數據源,它是here如何將XML文件插入Wordpress數據庫

我想用這個函數將所有的產品插入數據庫或更新重複鍵。重複密鑰是產品元素<prod id="685814171" in_stock="yes" stock_quantity="">上的ID。我將它保存爲SKU字段。

下面是函數

function parse_xml(){ 
global $wpdb; 
$xml = simplexml_load_file('http://www.hot-offers.net/wp-content/themes/hotoffers/datafeed_249713.xml'); 

foreach($xml->datafeed->prod as $item){ 

    $att = $item->attributes(); 

    $sql = 'INSERT INTO wp_pcu_babytoddler_products 
       (sku, title, url, stock_message, price, image, pid) 
      VALUES 
       (%d, %s, %s, %s, %d, %s, %s) 
      ON DUPLICATE KEY UPDATE  
       title = VALUES(title), 
       url = VALUES(url), 
       stock_message = VALUES(stock_message), 
       price = VALUES(price), 
       image = VALUES(image), 
       pid = VALUES(pid);'; 

    $sql_prep = $wpdb->prepare($sql, 
         (string)$att->id, 
         (string)$item->text->name, 
         (string)$item->uri->awTrack, 
         (string)$att->in_stock, 
         str_replace('.','',(string)$item->price->buynow), 
         (string)$item->uri->mImage, 
         (string)$item->pId); 

    $wpdb->query($sql_prep); 
} 
} 

這裏是我的數據庫架構

CREATE TABLE IF NOT EXISTS `wp_pcu_babytoddler_products` (
    `sku` int(11) NOT NULL, 
    `title` text NOT NULL, 
    `url` text NOT NULL, 
    `stock_message` text NOT NULL, 
    `price` int(11) NOT NULL, 
    `image` text NOT NULL, 
    `pid` text NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

ALTER TABLE `wp_pcu_babytoddler_products` ADD PRIMARY KEY (`sku`); 

該功能部分工作,因爲它插入行到databate但應該因爲在Feed中有。我究竟做錯了什麼?

我不必使用$wpdb對象來插入這些,我只是認爲它更容易。

編輯

這裏是一個錯誤我越來越雖然ID 2147483647不會將XML飼料中存在,這似乎影響剩餘產品。

WordPress database error: [Duplicate entry '2147483647' for key 'sku'] 
INSERT INTO `wp_pcu_babytoddler_products` 
    (`sku`, `title`, `url`, `stock_message`, `price`, `image`, `pid`) 
VALUES 
    (
    '3083667637', 
    'Baby Dan BabyDen Play Pen Black 2014', 
    'http://www.awin1.com/pclick.php?p=3083667637&a=249713&m=3975', 
    'In Stock', 
    '9849', 
    'http://www.babyandtoddlerworld.co.uk/imagprod/imaglarg/BDAN-Babyden-Black.jpg', 
    'BDAN-Babyden-Black-67116-2600-1400-10' 
    ) 

Array 
(
    [sku] => 3083667637 
    [title] => Baby Dan BabyDen Play Pen Black 2014 
    [url] => http://www.awin1.com/pclick.php?p=3083667637&amp;a=249713&amp;m=3975 
    [stock_message] => In Stock 
    [price] => 9849 
    [image] => http://www.babyandtoddlerworld.co.uk/imagprod/imaglarg/BDAN-Babyden-Black.jpg 
    [pid] => BDAN-Babyden-Black-67116-2600-1400-10 
) 
+0

你會得到什麼錯誤?可能是由於超出執行時間造成的問題。並且您使用woocommerce嗎? –

+0

不幸的是,腳本沒有收到任何錯誤,腳本運行成功,但只有136條記錄顯示在數據庫中。我唯一能想到的就是ID被複制,即'(string)$ att-> id'。 我正在使用woo電子商務,但不是用於此導入。 – AfromanJ

+0

從你的xml文件中,我發現這些是產品,應該有這個工作的插件,但你編碼它。是否有機會打破xml文件nto部分? –

回答

1

剛剛發現的問題,它與SKU爲數據庫中的int(),一個int()可以存儲的最大數量爲。它截斷了上面的任何數字!

我也跟着這樣的回答:https://stackoverflow.com/a/20442152/1838483

你只需要改變int()varchar(20)

相關問題