【问题标题】:Storing XML data into MySQL using PHP使用 PHP 将 XML 数据存储到 MySQL 中
【发布时间】:2017-05-25 11:11:40
【问题描述】:

我有一个 XML 文件 (exemel.xml) 如下:

<XMLmeta>
<Container>

    <Group>
        <Name>Persephone</Name>
        <Order>1</Order>
            <School>
                <Schoolname>Best High School</Schoolname>
                <Grade>10</Grade>
            </School>
    </Group>

 <Group>
      <Name>John</Name>
      <Order>2</Order>
      <School>
      <Schoolname>Wurst High School</Schoolname>
      <Grade>9</Grade>
      </School>
 </Group>

 </Container>
 </XMLmeta>

我想了解的是如何将这些数据添加到 MYSQL 中。目前我知道如何选择 XML,但我不知道如何准确地选择我的值(名称、顺序等)。我不知道如何将此 XML 数据插入 MYSQL。

我的代码

$danielbryan = new mysqli('localhost', 'root', '', 'database');
$url = 'exemel.xml';
$output = file_get_contents($url);
$xml = simplexml_load_string($output);

foreach ($xml){
 //what do i do here//
 $insert = $danielbryan->prepare('INSERT INTO mytable () VALUES(?,?,?,?)');
 $insert->execute();
}

【问题讨论】:

    标签: php mysql xml database mysqli


    【解决方案1】:

    您可以遍历 $xml-&gt;Container-&gt;Group 来实现这一点。

    您可以阅读有关SimpleXMLElement 的更多信息,但基本上它会将 XML 文档解析为标准对象。

    例子:

    <?php
    $entries = [];
    foreach ($xml->Container->Group as $group) {
      $entry = [];
      $entry['name'] = $group->Name->__toString();
      $entry['order'] = $group->Order->__toString();
      $entry['school_name'] = $group->School->Schoolname->__toString();
      $entry['grade'] = $group->School->Grade->__toString();
      $entries[] = $entry;
    }
    

    演示:https://eval.in/805278

    输出:

    Array
    (
        [0] => Array
            (
                [name] => Persephone
                [order] => 1
                [school_name] => Best High School
                [grade] => 10
            )
    
        [1] => Array
            (
                [name] => John
                [order] => 2
                [school_name] => Wurst High School
                [grade] => 9
            )
    
    )
    

    这为您提供了一个完整的简单数组格式,然后您可以将其插入到数据库表中。

    可能是这样的:

    foreach ($entries as $entry) {
      $insert = $danielbryan->prepare('INSERT INTO mytable (`name`, `order`, `school_name`, `grade`) VALUES(?,?,?)');
      $insert->bind_param("sdsd", $entry['name'], $entry['order'], $entry['school_name'], $entry['grade']);
      $insert->execute();
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2014-02-06
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      相关资源
      最近更新 更多