我有一个 XML 数据源,它是 here .
我正在尝试使用此功能将所有产品插入数据库或更新重复键。重复键是产品元素 <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`);
此函数部分起作用,因为它将 136 行插入到数据库中,但应该有 232 行,就像 Feed 中那样。我做错了什么?
我不必使用 $wpdb
反对插入这些,我只是觉得这样更容易。
编辑
虽然 XML Feed 中不存在 ID 2147483647,但我收到了一个错误,但这似乎会影响其余产品。
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&a=249713&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
)
最佳答案
刚刚发现问题,问题在于 SKU 在数据库中作为 int()
存储,int()
可以存储的最大数量是 2147483647 。它会截断任何高于该数字的数字!
我遵循了这个答案:https://stackoverflow.com/a/20442152/1838483
您只需将 int()
更改为 varchar(20)
。
关于php - 如何将 XML 文件插入 WordPress 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33388118/