我有以下XML和代码,我尝试将其保存在mySQL中。它工作正常但我的问题是我无法获得产品ID属性。
SQLSTATE [23000]:完整性约束违规:1048列' product_id'不能为空
<product id="1111845">
<name><![CDATA[MadBiker 600]]></name>
<link>http://demo.com/p.MadBiker-600.1111845.html</link>
<price_with_vat>107.01</price_with_vat>
...
...
...
</product>
这是代码
$xml = simplexml_load_file("demo.xml");
foreach($xml->products->product as $data) {
$sql = "INSERT INTO products (shop, product_id, name, price, shipping, manufacturer, stock, availability)
VALUES (:SHOP, :ID, :NAME, :PRICE, :SHIPPING, :MANUFACTURER, :STOCK, :AVAILABILITY)";
$stmt = $dbh->prepare($sql);
"ID" => $data->product[id] ,
"NAME" => $data->name,
"PRICE" => $data->price_with_vat,
怎么做?
答案 0 :(得分:1)
您的foreach
循环已遍历<product>
个节点:
foreach ($xml->products->product as $data) {
//...
}
因此,在这种情况下,$data
已经代表<product>
,您不想使用$data->product
。然后,只需在['id']
本身上通过数组键引用$data
属性即可:
"ID" => (string)$data['id']
(不要忘记将其强制转换为字符串 - 其他节点需要通过(string)
进行相同的处理)
"NAME" => (string)$data->name,
"PRICE" => (string)$data->price_with_vat,
PHP没有显示其他警告的事实表明您没有display_errors
。始终在开发代码时,请使用
error_reporting(E_ALL);
ini_set('display_errors', 1);
或者在php.ini中设置它们。
答案 1 :(得分:0)
尝试(int)$data->product['id']
,您需要在使用SimpleXML时投射属性。
答案 2 :(得分:-1)
而不是使用
$data->product['id'],
$data->name,
$data->price_with_vat,
使用
$data['product'][0]
$data['name']
$data['price_with_vat']