【问题标题】:XML to database - foreach loop to MySQLXML 到数据库 - foreach 循环到 MySQL
【发布时间】:2018-12-10 13:45:57
【问题描述】:

我正在使用 simpleXML 获取 XML 文件,并且我想使用 foreach 循环将这些值存储在我的数据库中。这是我的代码:

<?php
$xml = simplexml_load_string('XML-FILE');

foreach ($xml->METADATA->DATA as $item) {
    foreach ($item->children() as $child) {
        $sel_stmt = "INSERT INTO dwh_xml (".$child->getName().") VALUES ('".$child."') ";
        directSQL($sel_stmt);
    }
}
?>

我的 XML 文件如下所示:

<xml version="1.0" encoding="utf-8">
    <METADATA>
        <DATA>
            <FIELD_1>001</FIELD_1>
            <FIELD_2>ENTRY_2</FIELD_2>
            <FIELD_3>ENTRY_3</FIELD_3>
            <FIELD_4>ENTRY_4</FIELD_4>
            <FIELD_5>ENTRY_5</FIELD_5>
            <FIELD_6>000003</FIELD_6>
            <FIELD_7>ENTRY_7</FIELD_7>
            <FIELD_8>ENTRY_8</FIELD_8>
            <FIELD_9>ENTRY_9</FIELD_9>
            <FIELD_10>ENTRY_10</FIELD_10>
            <FIELD_11>ENTRY_11</FIELD_11>
            <FIELD_12>ENTRY_12</FIELD_12>
            <FIELD_13>ENTRY_13</FIELD_13>
        </DATA>
    <METADATA>
</xml>

导入到我的数据库正在工作,但是对于每个值,它都会生成一个新条目,我不知道必须如何更改上面的代码,以便它将成为我的数据库中具有一个 ID 的单个条目。这是我的测试条目的屏幕截图:

在这里你可以看到它应该是什么样子:

我知道我的 foreach 循环做错了,我知道这对你们中的一些人来说可能很容易,但现在我无法自己修复它。任何帮助将不胜感激。

【问题讨论】:

  • 感谢您的回答。你可以和我分享一些代码吗?我正在使用 mysqli 而不是 PDO。非常感谢您的帮助。
  • 前一个是正确的,但循环 i for date 也尝试使它用于该字段...假设您在一个字段中有更多值,它会起作用跨度>
  • 好的,谢谢@user3783243!期待你的代码

标签: php mysql xml foreach simplexml


【解决方案1】:

您需要在最里面的foreach 之外构建完整的查询。这样的事情将是一个好的开始。该线程应该能够帮助您使绑定与mysqliMySQLI binding params using call_user_func_array 一起使用。使用 PDO,您只需将 $params 传递给 execute 函数。

foreach ($xml->METADATA->DATA as $item) {
    foreach ($item->children() as $child) {
        $cols[] = $child->getName();
        $params[] = $child->nodeValue;
    }
    if(!empty($params)) {
         $columns = implode(',', $cols);
         $placeholders = rtrim(str_repeat('?, ', count($params)), ', ');
         $sql = 'INSERT INTO dwh_xml ( ' . $columns . ') VALUES(' . $placeholders . ')';
         $stmt = $db_con->prepare($sql);
         $stmt->execute();
         unset($params, $cols, $placeholders);
    }
}

https://3v4l.org/nhJi7

【讨论】:

  • 感谢您的帮助。您的代码似乎工作正常,但我无法在我的数据库中实现条目。我总是收到错误消息:“列计数与第 1 行的值计数不匹配”。知道为什么吗?它与我的自动增量 ID 列有关吗?你有什么想法吗?
  • 如果这是使用 PDO - 那么您可以在 $stmt-&gt;execute($params); 中传递参数
  • 让它与 PDO 一起工作。非常感谢您的帮助。
猜你喜欢
  • 2018-08-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 2012-03-21
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多